簡體   English   中英

為自定義UITableViewCell添加目標/操作

[英]Adding target/action for custom UITableViewCell

所以我不知道我在做什么錯。 我有兩個單元格,每個單元格在各自的部分。 兩者都有一個帶有自己的插座/ xib的UISegmentedControl,等等。兩行在模擬器中都顯示得很好,但是只有第一個單元格(SortByTableViewCell)按下UISegmentedControl時,才會調用該動作。 在第二個單元格中,UISegmentedControl不會使應用程序崩潰,但也不會調用其選擇器。 有什么明顯的我想念的東西嗎? 謝謝!

- (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;
       }

為什么要在單元格初始化之前設置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;
   }

希望它能解決您的問題。

您是否嘗試過在Interface Builder中刪除連接並重新創建它?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM