访问,从单个 nib 获取对多个视图的引用

Posted

技术标签:

【中文标题】访问,从单个 nib 获取对多个视图的引用【英文标题】:Access, get reference to multiple views from a single nib 【发布时间】:2012-08-31 10:41:43 【问题描述】:

在表格视图中,我正在插入带有重用标识符的单元格。所以,我必须为每个单元格创建一个 nib (xib) 文件。我想将所有单元格视图放在一个 xib 文件中并单独获取对它们的引用。如何做到这一点?

【问题讨论】:

为什么不使用cellForRowAtIndexPath 访问每个单元格? 【参考方案1】:

您可以将 xib 作为视图数组访问,就像这样:

-(UITableViewCell *) viewCellForSection:(NSInteger) section

    UITableViewCell *view = nil;

    NSArray* views= [[NSBundle mainBundle] loadNibNamed:@"myXib" owner:self options:nil];

    switch ( section) 
        case 0: 
            view = (UITableViewCell*) [views objectAtIndex:1];
            break;
        case 1: 
            view = (UITableViewCell*) [views objectAtIndex:0];
            break;
        default: 
            view = (UITableViewCell*) [views objectAtIndex:2];
    
    return view;

【讨论】:

是的,可以像这样甚至使用标签访问视图,但我想在 registerNib:forCellReuseIdentifier: 方法中使用它们,该方法只接受 UINib 参数。那么有什么方法可以使用 nib 中的一个视图创建 UINib?【参考方案2】:

您必须在方法(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 中实现代码。当您选择表格中的单元格时,将调用此方法。这就是为什么你必须实现你想要的。

希望下面的代码对你有所帮助。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

// yourObject is object of yourViewController and you can declare it .h file.

                    if (!yourObject) 
                    yourObject = [[yourViewController alloc] initWithNibName:@"yourViewController" bundle:nil];

                

                UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
                self.navigationItem.backBarButtonItem = backBarButtonItem;
                [backBarButtonItem release];
                [self.navigationController pushViewController:yourObject animated:YES];

    

【讨论】:

【参考方案3】:

我知道这是一个旧线程,但是当我尝试在 UITableViewCells 的 nib 中拥有多个视图时,我实际上在日志中找到了响应。这是日志:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException',
reason: 'invalid nib registered for identifier (cellIdentifier) - nib must
contain exactly one top level object which must be a UITableViewCell instance'

【讨论】:

以上是关于访问,从单个 nib 获取对多个视图的引用的主要内容,如果未能解决你的问题,请参考以下文章

如何获取对 .nib 文件中对象的引用?

是否可以从加载到的视图中访问/操作 nib 文件中的约束?

在单个视图控制器中使用多个 nib 文件?

从 NIB 加载 UIView - 帧大小错误

从外部引用设置属性上的 .attributedText(可通过 NIB 加载的 UIView 内的插座访问)似乎失败

在 MVC4 中的单个视图中访问多个模型中的项目