美文网首页iOSIOS三人行SB Cell
iOS 9:ViewController 中使用static c

iOS 9:ViewController 中使用static c

作者: itonny | 来源:发表于2016-01-07 09:48 被阅读4214次

从 iOS 5 开始,苹果在其新的IDE版本中提供了StoryBoard(下面叫故事板)编辑器,一直存在着一个巨大的缺陷——静态单元格只能在SDK内置的 UITableViewController 中使用,如果在程序员自己的ViewController中,静态单元格根本不会显示,甚至于编译器会提示错误信息:

“Illegal Configuration: Static table views are only valid when embedded in UITableViewControllerinstances”。

在自己的 ViewController 中使用静态单元格。可以利用 Xcode4.5 以后的 Container View , 我们可以将一个包含有静态单元格UITableViewController “嵌入”到自己的 ViewController中。

详细步骤:

  • 1.在故事板中拖入一个普通的ViewController

  • 2.在故事板中拖入一个常规的 TableViewController 。

  • 3.在这个 TableViewController 中使用静态单元格。

  • 4.在拖一个Container View 到ViewController中, 添加约束做屏幕适配 ,这个 Container View 会自动带有一个 segue 指向另一个 ViewController。将 segue 和那个ViewController 都删除。设置ViewController为首先启动项.

Snip20160106_6.png
  • 5.右键(或ctrl+左键)从 Container View 拖一条线到 TableViewController,然后在弹出的菜单中选择 Embed。
Snip20160106_4.png
  • 6.做到这一步, 很多人不造怎么获取后面的TableViewController, 下面提供一个简单方法:
    分别给ViewController和TableViewController指定控制器, 在TableViewController想怎么写代码就怎么写, 但是这里注意:
    • 1)在push进ViewController时候, 加载故事板代码跟加载 xib 不同
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"SPPersonalViewController" bundle:nil];
        SPPersonalViewController *personalViewController = [storyboard instantiateViewControllerWithIdentifier:@"SPPersonalViewController"];
        [self.navigationController pushViewController:personalViewController animated:YES];
Snip20160106_14.png

这里的SPPersonalViewController是你的ViewController
SPPersonalTableViewController是你的TableViewController

    1. ViewController的设置
Snip20160106_12.png
    1. TableViewController的设置
Snip20160106_13.png
    1. 然后就可以获取TableViewController , 在里面愉快地写数据源方法和代理方法了
@interface SPPersonalTableViewController ()<UITableViewDelegate, UITableViewDataSource>
@end
@implementation SPPersonalTableViewController
{
.......
}
@end

相关文章

网友评论

  • 青空逸隐:可以的, 不过最后面的数据处理说的不是很详细, 补充一下:
    1.关联线设置Identifiel
    2.主控制器实现prepareForSegue方法
    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    //BlindSpotReportAdd
    if([segue.identifier isEqualToString:@"Identifiel"] && [segue.destinationViewController isKindOfClass:[xxClass class]])
    {
    // 真正的容器
    self.objVc = segue.destinationViewController;
    }
    }
    3.接着可以在主控制器处理列表数据
    - (IBAction)submitAction:(UIBarButtonItem *)sender {

    NSLog(@"submitAction----");
    NSDictionary *infoDic = [self.objVc anlyzeListInfoGetDic];
    // 这里可以指定一个顺序的
    for (NSString *key in [infoDic allKeys])
    {
    if([infoDic[key] isEqualToString:@""])
    {
    [SVProgressHUD showErrorWithStatus:[NSString stringWithFormat:@"%@未填写完整!",key]];
    return;
    }
    }
    }
  • 青空逸隐:先mark一下, 感觉数据处理有点小麻烦,看看再说
  • cc54e97c6bc6:小董???:sweat_smile:
  • feng_dev:如何能修改静态cell 的 高度
    萧溪:heightForRowAtIndexPath
  • 飞翔的小骑兵:两者之间如何数据交互?例如我在VC中有个提交按钮,怎么获取到TableVC中数据,谢谢了~
    萧溪:就是子控制器,取子控制器就ok
  • 68919904bb7e:感谢作者分享
  • 陈长见:学习了,感谢作者分享

本文标题:iOS 9:ViewController 中使用static c

本文链接:https://www.haomeiwen.com/subject/jutfkttx.html