Nul*_*ify 6 objective-c uitableview uiviewcontroller ios
我正在尝试开发一个表视图控制器,其中行连接到多个View Controllers(TextField,TextView,TableView,DatePicker,ImageView等).
因此,如果我点击任何一行,它应该打开Intermediate View并将相应的控制器放在一个公共位置,其中所有控制器的其余部分将是相同的.假设我点击了索引映射到TableView的行.当它将打开中间控制器,它应该将tableview放在公共容器中,这个表视图应该来自单个TableView控制器,用于所有其他Tableview.
我是ios的新手,不能设计这个.
设计这个的最佳方法是什么?我该如何实现?


谢谢
我建议不要在Storyboard中创建单元格并连接它.而是在故事板中留下空表并使用代码创建单元格.您可以通过子类创建自定义单元格UITableViewCell.
在故事板中,您只需使用segue将表视图与所有视图控制器链接,并为其指定正确的标识符名称.

现在实现所有委托方法UITableView.覆盖-tableView:didSelectRowAtIndexPath:方法和行选择执行特定行的segue.
例:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
switch (indexPath.row) {
case 0:
[self performSegueWithIdentifier:@"BasicCoreDataSegue" sender:self];
break;
default:
break;
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,如果选择第一行,它将推送与BasicCoreDataSegueStoryboard中的segue 连接的视图控制器,您可以将其与图像进行比较.
使用类似的方法创建其他segue并didSelectRowAtIndexPath在不同的switch case中调用它们.
此外,如果要传递任何值以推送控制器,请覆盖以下方法:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
if ([[segue identifier] isEqualToString:@"BasicCoreDataSegue"]) {
// Get reference to the destination view controller
TextViewController *vc = [segue destinationViewController];
vc.textView.text = "Hello";
}
}
Run Code Online (Sandbox Code Playgroud)
以上代码适用于通用控制器.现在,您不需要在didSelectRowAtIndexPath方法集中间控制器segue中创建更多segue.
使用[self.tableView indexPathForSelectedRow]方法获取方法中的选定行prepareForSegue.
例如:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[self performSegueWithIdentifier:@"BasicCoreDataSegue" sender:self];
}
Run Code Online (Sandbox Code Playgroud)
现在prepareForSegue调用时,然后为中间控制器设置整数值.
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// You can get selected row using below line
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
// Pass the selected object to the new view controller.
if ([[segue identifier] isEqualToString:@"BasicCoreDataSegue"]) {
// Get reference to the destination view controller
IntermediateController *vc = [segue destinationViewController];
vc.selectedIndex = indexPath.row;
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中selectedIndex是一个整数变量,用于跟踪选择哪一行.
现在在Intermediate controller中-viewDidLoad()使用switch case从行选择中获取你想要的控制器对象,并在Intermediate Controller中将其视图添加为子视图.
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard"
bundle: nil];
TextViewController *controller = (TextViewController*)[storyBoard
instantiateViewControllerWithIdentifier: @"TextViewControllerId"];
[self.topView addSubview:controller.view];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3412 次 |
| 最近记录: |