iOS Xcode 中的 UIViewController 中的 UIView 中的 UITableView
Posted
技术标签:
【中文标题】iOS Xcode 中的 UIViewController 中的 UIView 中的 UITableView【英文标题】:UITableView within a UIView within UIViewController in iOs Xcode 【发布时间】:2015-04-29 09:14:13 【问题描述】:我想在xcode中实现以下。
我有一个视图控制器。在这个UIViewController
中,我有一个UITabBar
。在它们下方是UIView
。将UITableView
添加到UIView
的最佳方法是什么?然后能够单击UITableViewCell
并打开另一个UIViewController
以显示有关UITableViewCell
的更多信息?
这是我的故事板的当前设置:
你能给我一个解决这个问题的方法吗?谢谢
【问题讨论】:
试试appcoda.com/uitableview-tutorial-storyboard-xcode5 对于自定义单元格试试appcoda.com/customize-table-view-cells-for-uitableview 【参考方案1】:您需要解决您的问题,但我不确定您的问题是什么。
在情节提要中,将UIView
拖到您的UIViewController
中。然后在那个UIVIew
中拖一个UITableView
(不是控制器)。
您将能够在左侧看到视图层次结构。
然后将您的 tableview datasource
和 delegate
链接到父控制器。
在您的 .h 文件中,添加 UITableViewDataSource
和 UITableViewDelegate
协议,还将您的表格视图链接为 Outlet
。
在您的 .m 文件中,添加 tableview 委托方法(numberOfRowsInSection:
和 cellForRowAtIndexPath:
)
我还建议在 tableview 方法中添加 didSelect:
,因为你会需要它。
你可以走了。 :)
这实际上与创建 tableview 完全相同,只是你的 tableview 是 UIView 的子视图,如果涉及到代码,这根本不重要。您唯一需要“小心”的是在情节提要中正确构建视图,并确保约束不会因某种原因使您的 tableview 无法使用。
查看one of my previous answers,我在其中解释了如何制作表格视图并使其在传递数据时加载另一个控制器,如果我在这里写的所有内容仍然让您感到困惑,您可能需要这样做。
跟进:
从您的 cmets 中,我了解到您的 UIView 的这个子视图可以是不同的东西;一个 tableview、一个 webview 等等。
有很多方法可以做到这一点,据我所知,有两种方法既简单又可靠(根据我作为开发人员的
-
在您的父视图控制器中准备好所有可能性,例如,如果您只有 2 种可能性,那就“可以”。
最好的方法是准备一个容器视图(字面意思是容器视图),它会根据您的需要加载不同的 OTHER 视图控制器。
我认为选项 2 更可靠,因为它将代码分成不同的类,允许您独立修改每个类,并且您可以轻松删除/添加新视图。
据我所知,您的父控制器中会有某种 switch 语句,它将加载所需的 UIViewController(或 tableview 或任何东西)。无论你在那里做什么都会像往常一样,但会被限制在另一个 VC 中的一个较小的视图中。
您可以在情节提要中创建该容器视图,并使用 segue(ToTable、ToWeb、ToCollection)预先链接每个其他 VC,这就是将容器视图链接到您的 3 个 UIViewController 的 segue 名称的好例子。
请注意,如果需要,您可以传递数据,但您将让所有单独的控制器处理它们自己的东西,即使它在您当前的 vc 中可见。
【讨论】:
通读这个答案听起来很棒。但我有一件事会影响我这样做的整个原因。您说的将 UITableView 拖入的 UIView 需要是动态的。取决于先前的单元格选择。 UIView 必须加载一个 UIWebView 或这个 UITableView。你怎么认为?有没有办法做到这一点,以便我可以合并两个对象? 哦,所以你必须在代码中创建两个视图(UIView 和 Webview/Tableview/whatever),它稍微更复杂,但没有什么不合理的。您必须掌握 CGRect 和框架的艺术,让我快速编辑我的答案 我认为可以在情节提要中创建视图..然后将它们加载到另一个视图中?这不可能吗?这是我的第一个应用程序......已经有点复杂了哈哈 哦,如果这是您的第一个应用程序,我强烈建议您添加到我的答案中:D 除非您已经使用过其他语言或移动平台。但如果你觉得自己足够强大和有足够的动力,我认为你应该能够在大约 8 小时内完成我所说的,考虑到你必须阅读至少 3 个不同的教程,做它们,然后混合它们. 我已经用android创建了这个应用程序。它可以工作......但是编码风格明显不同,我需要一段时间来适应。这些教程是什么?您发布的文字或..您有任何链接可以分享..感谢您的帮助。一旦我明白了我需要做什么,就会给你一个更新!【参考方案2】: - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
return [catagorry count]; //count number of row from counting array hear cataGorry is An Array
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *MyIdentifier = @"MyIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil)
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:MyIdentifier] autorelease];
// Here we use the provided setImageWithURL: method to load the web image
// Ensure you use a placeholder image otherwise cells will be initialized with no image
[cell.imageView setImageWithURL:[NSURL URLWithString:@"http://example.com/image.jpg"]
placeholderImage:[UIImage imageNamed:@"placeholder"]];
cell.textLabel.text = @"My Text";
return cell;
这些是创建基本表格视图的基本方法。要加载对应于单元格单击的视图控制器,您可以使用确实选择行方法
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
/* //Pushing next view
cntrSecondViewController *cntrinnerService = [[cntrSecondViewController alloc] initWithNibName:@"cntrSecondViewController" bundle:nil];
[self.navigationController pushViewController:cntrinnerService animated:YES];
*/
[self performSegueWithIdentifier:@"identifier" sender:self];
【讨论】:
以上是关于iOS Xcode 中的 UIViewController 中的 UIView 中的 UITableView的主要内容,如果未能解决你的问题,请参考以下文章
您好,我是 iOS 开发新手,我很难用 json 数据填充嵌入在 UIviewcontroller 中的 tableview