在数组中保存NSView实例

时间:2011-08-04 06:01:24

标签: objective-c cocoa nsarray nstableview nsview

是否可以在可变数组中存储NSView对象?据我所知,视图将是一个对象,因此数组应该能够保存它。具体来说,我想要保存一个nib文件的实例,我认为将使用NSNib init加载,然后将addObject加载到数组中。

想法是在TableView中的每列中显示NSView。我认为可以这样做,因为iTunes在列表视图中显示专辑图片时做了类似的事情(我认为是NSImage)。

仍然,非常感谢有关该主题的任何知识(或链接到示例或教程)。

2 个答案:

答案 0 :(得分:2)

TableViews通常不为每个项目保留NSView。他们拥有许多NSViewTableCells(系统方面,比NSViews轻得多),他们重新使用这些单元格。它们通常没有比显示TableView,AFAIK的可见部分所需的更多单元格,并且当滚动视图时,重新使用已变为“不可见”的单元格。

因此,最好的方法是对单元格进行子类化,并使TableView使用这些内容显示内容。对我的MP3专辑列表中的每个条目使用NSView都会非常昂贵。

答案 1 :(得分:1)

在Xcode中转到File-> New File并选择Objective-C类然后在下拉列表中选择使其成为UITableViewCell的子类。将其命名为MyCell(例如)

接下来,在界面构建器中,创建一个新的XIB并将其所有者更改为新创建的类。您可能还想删除默认视图并添加UITableViewCell。将所有者的视图出口设置为此新的tableview单元格。然后将您想要的任何内容添加到UITableViewCell。

然后创建一个新的UIViewController(首先创建一个新的UITableViewController然后将其类型更改为UIViewController可能会有所帮助,以便为您添加所有UITableViewDelegate方法)并选择为UIViewController添加一个XIB文件。打开新创建的UIViewController的头文件并添加UITableViewDelegate协议,这样头文件可能如下所示:

@interface MyViewController: UIViewController <UITableViewDelegate, UITableViewDataSource>

在视图控制器的视图上(在界面构建器中)添加UITableView,然后设置其数据源并委托给所有者。确保导入MyCell.h头文件。然后为你的UITableViewCell特别实现tableViewMethods你会做这样的事情:

       - (UITableViewCell *)tableView:(UITableView *) tableView
             cellForRowAtIndexPath:(NSIndexPath *) indexPath
    {
        static NSString *MyCellIdentifier = @"MyCellIdentifier";

        MyCell *cell = (MyCell *)[tableView dequeueReusableCellWithIdentifier:MyCellIdentifier];
        if (cell == nil) {
            NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MyCell" owner:self options:nil];

            cell = [nib objectAtIndex:0];   
        }

    //Here you would set properties of the cells items like labels, etc.
return cell;
    }