Objective c 在数组中保存NSView实例

Objective c 在数组中保存NSView实例,objective-c,cocoa,nsarray,nstableview,nsview,Objective C,Cocoa,Nsarray,Nstableview,Nsview,是否可以将NSView对象存储在可变数组中?据我所知,视图将是一个对象,因此阵列应该能够容纳它。具体地说,我希望保存一个nib文件的几个实例,我认为这些实例将使用NSNib init加载,然后将对象添加到数组中 其思想是在TableView中列的每一行中显示NSView。我认为这是可以做到的,因为iTunes在列表视图中显示相册插图时做了类似的事情(我认为是NSImage) 尽管如此,任何关于该主题的知识(或链接到示例或教程)都将非常感谢 表视图通常不包含每个项目的NSView。它们拥有许多NS

是否可以将NSView对象存储在可变数组中?据我所知,视图将是一个对象,因此阵列应该能够容纳它。具体地说,我希望保存一个nib文件的几个实例,我认为这些实例将使用NSNib init加载,然后将对象添加到数组中

其思想是在TableView中列的每一行中显示NSView。我认为这是可以做到的,因为iTunes在列表视图中显示相册插图时做了类似的事情(我认为是NSImage)


尽管如此,任何关于该主题的知识(或链接到示例或教程)都将非常感谢

表视图通常不包含每个项目的NSView。它们拥有许多NSViewTableCell(就系统而言,它们比NSViews轻得多),并且可以重复使用这些单元格。它们通常没有比显示TableView可见部分所需的更多的单元格,AFAIK,当滚动视图时,将重新使用“不可见”的单元格


因此,最好的方法是对单元格进行子类化,并使用这些子类使TableView显示内容。对列表中的每个条目使用NSViews(例如,我的MP3相册)将非常昂贵

表视图通常不包含每个项目的NSView。它们拥有许多NSViewTableCell(就系统而言,它们比NSViews轻得多),并且可以重复使用这些单元格。它们通常没有比显示TableView可见部分所需的更多的单元格,AFAIK,当滚动视图时,将重新使用“不可见”的单元格


因此,最好的方法是对单元格进行子类化,并使用这些子类使TableView显示内容。对列表中的每个条目使用NSViews(例如,我的MP3相册)将非常昂贵

在Xcode goto File->New File中选择Objective-C类,然后在下拉列表中选择使其成为UITableViewCell的子类。将其命名为迈塞尔(例如)

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

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

@interface MyViewController: UIViewController <UITableViewDelegate, UITableViewDataSource>
       - (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;
    }

在Xcode goto File->New File中选择Objective-C class,然后在下拉列表中选择使其成为UITableViewCell的子类。将其命名为迈塞尔(例如)

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

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

@interface MyViewController: UIViewController <UITableViewDelegate, UITableViewDataSource>
       - (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;
    }

表视图只有大约10个项目,所以我希望不会太累。谢谢你的回答,但我该怎么做呢。。。那?IIRC,Cocoa文档描述了这或多或少令人满意的情况。我也看到了其他的在线资源,但是没有任何链接,对不起。表视图只有大约10个项目,所以我希望不会太累。谢谢你的回答,但我该怎么做呢。。。那?IIRC,Cocoa文档描述了这或多或少令人满意的情况。我也在网上看到了其他来源,但是没有任何链接,对不起。