在静态Tableview中包含“动态原型”的部分和“静态单元”

时间:2012-02-15 21:16:54

标签: objective-c ios cocoa-touch uitableview

我想用一个动态部分定义静态tableview 这可能吗?

第0部分应是静态的,标签用xcode连接到出口。

第1节应是动态的

我尝试了这个,但我不知道我将为静态部分返回什么单元格。

static NSString *CellIdentifier = @"ItemCellBasic";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

switch (indexPath.section)
{ case 0:
    return // I don´t know what

  case 1:
    cell.textLabel =@"dynamic";
    return cell;    
}

编辑1; 现在我试过了:

case 0: return [super tableView:tableView cellForRowAtIndexPath:indexPath];

但得到了:

*** Assertion failure in -[UITableView _createPreparedCellForGlobalRow:withIndexPath:], /SourceCache/UIKit_Sim/UIKit-1912.3/UITableView.m:6072
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:'

2 个答案:

答案 0 :(得分:5)

我对此问题有部分解决方案

在Table视图数据源方法中,我返回静态单元格的超类结果,对于动态单元格,我返回所需的动态值。

在 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath dequeueReusableCellWithIdentifier:返回nil所以我创建了一个新的UITableViewCell

剩下的问题:

在xcode中你必须指定,“动态部分”中的行数(whitch是当然不是动态的)。您不能显示超过此处定义的最大值(或获得例外; - ))。

Samplecode:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{ 
  switch (section) 
  { case STATIC_SECTION:
      return  [super tableView:tableView numberOfRowsInSection:section];

    case DYNAMIC_SECTION
      return NUMBER_OF_DYNAMIC_ROWS; 
  }
}

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

  switch (indexPath.section)
  {
    case STATIC_SECTION:
      return [super tableView:tableView cellForRowAtIndexPath:indexPath];

    case DYNAMIC_SECTION:
      cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
      if (!cell) 
      {  cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] ;
      }

      cell.textLabel.text=DYNAMIC_TEXT;
      return cell;    
  }

}

答案 1 :(得分:-1)

而不是开关尝试使用一些好的旧if语句

 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 
       if(section==STATIC_SECTION){
           return  *the number of rows in the static section*
       }
       else{
           return NUMBER_OF_DYNAMIC_ROWS; 
       }
  }

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

    static NSString *CellIdentifier = @"ItemCellBasic";
    UITableViewCell *yourCell = [tableView dequeReusableCellWithIdentifier:CellIdentifier forIndexpath:indexPath];

    yourCell.text = *your dynamic text or something*

    return yourCell;
}

现在假设您的静态单元格没有重用标识符,因为这只会是多余的,并且因为您只需要一个原型单元格来重复使用,这应该是您的设置