2011-10-31 47 views
1

所以我無法弄清楚我做錯了什麼。我有兩個單元格,每個單元格都在自己的部分中。兩者都有一個UISegmentedControl與他們自己的outlet/xib等。這兩行在模擬器中顯示得很好,但只有第一個單元格(SortByTableViewCell)會在按下UISegmentedControl時調用該操作。在第二個單元格中,UISegmentedControl不會使應用程序崩潰,但它也不會調用它的選擇器。有什麼明顯的我失蹤了?謝謝!添加自定義UITableViewCell的目標/動作

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSUInteger section = [indexPath section]; 
    NSUInteger row = [indexPath row]; 
    if (section == 0) { 
     static NSString *SortByCellIdentifier = @"SortByCellIdentifier"; 
     SortByTableViewCell *cell = (SortByTableViewCell *)[tableView dequeueReusableCellWithIdentifier:SortByCellIdentifier]; 
     [cell.SortBySegmentedControl addTarget:self action:@selector(SortBySegmentedControlPressed:) forControlEvents:UIControlEventValueChanged]; 
     if (cell == nil) { 
      NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@"SortByTableViewCell" owner:self options:nil]; 
      for (id currentObject in nibObjects) { 
       if ([currentObject isKindOfClass:[SortByTableViewCell class]]) { 
        cell = (SortByTableViewCell *)currentObject; 
       } 
      } 
     } 
     cell.selectionStyle = UITableViewCellSelectionStyleNone; 
     return cell; 
    } 
    else { 

      static NSString *ConditionCellIdentifier = @"ConditionCellIdentifier"; 
      ConditionTableViewCell *cell = (ConditionTableViewCell *)[tableView dequeueReusableCellWithIdentifier:ConditionCellIdentifier]; 
      [cell.ConditionSegmentedControl addTarget:self action:@selector(ConditionSegmentedControlPressed:) forControlEvents: 
      UIControlEventValueChanged]; 
      if (cell == nil) { 
       NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@"ConditionTableViewCell" owner:self options:nil]; 
       for (id currentObject in nibObjects) { 
        if ([currentObject isKindOfClass:[ConditionTableViewCell class]]) { 
         cell = (ConditionTableViewCell *)currentObject; 
        } 
       } 
      } 
     cell.selectionStyle = UITableViewCellSelectionStyleNone; 
     return cell; 
     } 

回答

1

爲什麼在單元初始化之前設置addTarget? 試一下:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
NSUInteger section = [indexPath section]; 
NSUInteger row = [indexPath row]; 
if (section == 0) { 
    static NSString *SortByCellIdentifier = @"SortByCellIdentifier"; 
    SortByTableViewCell *cell = (SortByTableViewCell *)[tableView dequeueReusableCellWithIdentifier:SortByCellIdentifier]; 
    if (cell == nil) { 
     NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@"SortByTableViewCell" owner:self options:nil]; 
     for (id currentObject in nibObjects) { 
      if ([currentObject isKindOfClass:[SortByTableViewCell class]]) { 
       cell = (SortByTableViewCell *)currentObject; 
      } 
     } 
    } 
    [cell.SortBySegmentedControl addTarget:self action:@selector(SortBySegmentedControlPressed:) forControlEvents:UIControlEventValueChanged]; 
    cell.selectionStyle = UITableViewCellSelectionStyleNone; 
    return cell; 
} 
else { 

     static NSString *ConditionCellIdentifier = @"ConditionCellIdentifier"; 
     ConditionTableViewCell *cell = (ConditionTableViewCell *)[tableView dequeueReusableCellWithIdentifier:ConditionCellIdentifier]; 
     if (cell == nil) { 
      NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@"ConditionTableViewCell" owner:self options:nil]; 
      for (id currentObject in nibObjects) { 
       if ([currentObject isKindOfClass:[ConditionTableViewCell class]]) { 
        cell = (ConditionTableViewCell *)currentObject; 
       } 
      } 
     } 
     [cell.ConditionSegmentedControl addTarget:self action:@selector(ConditionSegmentedControlPressed:) forControlEvents: 
     UIControlEventValueChanged]; 
    cell.selectionStyle = UITableViewCellSelectionStyleNone; 
    return cell; 
    } 

希望它能解決您的問題。

+0

你真棒!謝謝!我有時候會把我的頭髮拉出這些小東西!希望有一天我會記住他們! – Crystal

+0

在objective-c [nil doSomeStuff]中不返回像Java一樣的NullPointerException。只是沒有完成。所以在你的代碼中cell是零,然後cell.ConditionSegmentedControl是零,所以沒有添加目標。 –

+0

並且請將您的ConditionSegmentedControl重命名爲conditionSegmentedControl。屬性名稱不能以大寫字母開頭。 –

0

您是否試過在界面生成器中刪除連接並重新創建它?

相關問題