4

我想在同一个 xib 中使用自定义 UITableviewCell 和 UITableView 而不创建 UITableViewCell 类?

正如您在下面看到的,我为 UITableViewCell 设置了标识符并像这样使用它:

UITableView 和 UITableViewCell 在同一个 xib

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
  }

}

但不工作?

4

3 回答 3

3

将 UITableViewCell *customCell 属性添加到您的视图控制器(例如,您的文件 ShowUsers.h)...

@property (nonatomic, strong) IBOutlet UITableViewCell *customCell;

并将其连接到您的 xib 中的自定义单元格。然后在 cellForRow 中使用以下代码(例如,您的文件 ShowUsers.m):

if (cell == nil) {
    [[NSBundle mainBundle] loadNibNamed:@"NibName" owner:self options:nil];
    cell = self.customCell;
    self.customCell = nil;
}
于 2013-03-13T07:18:55.350 回答
0

是的,您可以按照以下代码进行操作

在 ViewDidLoad 或 ViewWillAppear 下

label1Array=[NSMutableArray arrayWithObjects:@"A",@"B",nil];
label2Array=[NSMutableArray arrayWithObjects:@"C",@"D",nil];
label3Array=[NSMutableArray arrayWithObjects:@"E",@"F",nil];

UITableViewDelegate

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

static NSString *CellIdentifier = @"aCell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
UILabel *label1=[[UILabel alloc]init];
label1.frame=CGRectMake(0,0,40,40);
label1.text=[label1Array objectAtIndex:indexPath.row];
................
[cell.contentView addSubView: label1];

UILabel *label2=[[UILabel alloc]init];
label2.frame=CGRectMake(50,0,40,40);
label2.text=[label2Array objectAtIndex:indexPath.row];
[cell.contentView addSubView: label2];

UILabel *label3=[[UILabel alloc]init];
label3.frame=CGRectMake(100,0,40,40);
label3.text=[label3Array objectAtIndex:indexPath.row];
[cell.contentView addSubView: label3];
}

希望这可以帮助 !!!

于 2013-03-13T07:08:55.513 回答
0

看..你可以这样做。在这里,您使用 XIB 在一个 TableView 中添加两个 UITableViewCell。

在 Class.h 文件中:-

为单元数声明一个可变数组。

      {
         NSMutableArray * sectionRows;
      }

    @property (nonatomic,retain) IBOutlet UITableViewCell *addTvc1;
    @property (nonatomic,retain) IBOutlet UITableViewCell *addTvc2;

在 Class.m 中:-

    @synthesize addTvc1, addTvc2;

    - (void)viewDidLoad
      {
        [super viewDidLoad];

         sectionRows = [[NSMutableArray alloc] init];

         [sectionRows addObject:[[NSMutableArray alloc] 
                        initWithObjects:addTvc1, nil]];

         [sectionRows addObject:[[NSMutableArray alloc] 
                        initWithObjects:addTvc2, nil]];

     }

在 UITableViewDelegate 方法中 -

添加这个 -

    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
       return [sectionRows count];
    }

   - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:       
                                                      (NSInteger)section
   { 
      return [[sectionRows objectAtIndex:section] count];
   }

   - (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:
                                                      (NSIndexPath  *)indexPath
  { 
      return [[sectionRows objectAtIndex:indexPath.section] 
                               objectAtIndex:indexPath.row];
  }

连同代码一起,在 Class 的 XIB 中拖放两个 UITableViewCell,它们应该在视图之外,并使用 Files Owner 添加这些单元格。它将完美地工作。这里不需要创建一个单独的自定义 UITableViewCell 类。

于 2013-03-13T08:08:42.667 回答