2017-09-26 72 views
1

以下のコードを使用して、テーブルビューの行を設定しています。行をクリックすると、テーブルのデータがリロードされていますが、行は更新されていません。 iOSの11の前にそれが正常に働いていたが、iOSの11に更新した後、私はこの問題に直面しています:UITableviewセルがリロードデータで更新されない

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

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"DayCell" forIndexPath:indexPath]; 

UILabel *label = [cell viewWithTag:101]; 
UIImageView *imageView = [cell viewWithTag:102]; 

NSArray *days = @[@"Sunday", @"Monday", @"Tuesday", @"Wednesday", @"Thursday", @"Friday", @"Saturday"]; 
label.text = [days objectAtIndex:indexPath.row]; 

if ([_selectedDays containsObject:label.text]) { 
    imageView.image = [UIImage imageNamed:@"CheckedIcon"]; 
} else { 
    imageView.image = nil; 
} 

return cell; 
} 

そして、私はこのようなdidSelectRowAtIndexPathでデータを再ロードしています:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
[tableView deselectRowAtIndexPath:indexPath animated:NO]; 

UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath]; 
UILabel *label = [cell viewWithTag:101]; 

if ([_selectedDays containsObject:label.text]) { 
    [_selectedDays removeObject:label.text]; 
} else { 
    [_selectedDays addObject:label.text]; 
} 

[tableView reloadData]; 
} 

私が何か間違ったことをやっていますか? didSelectRowAtIndexPath方法で

+1

はどのようにあなたが '_selectedDays' –

+0

私としてviewDidLoad''で '_selectedDays'を初期化しています宣言します' _selectedDays = [NSMutableArrayの新しいです]; ' –

+0

オブジェクトを '_selectedDays'に追加します –

答えて

2

私はAppleデベロッパフォーラムで答えを得たために働くreloadDataでこのコードを追加します。私はインターフェイスの日の配列を宣言し、それをviewDidLoadで初期化し、コードをdidSelectRowAtIndexPathに変更しなければならなかった。だから今、私のコードは次のようになります。

@interface SomeTableViewController { 

@property (nonatomic, strong) NSArray *days; 
@property (nonatomic, strong) NSMutableArray *selectedDays; 

} 
... 
- (void)viewDidLoad { 
    [super viewDidLoad]; 

    _days = @[@"Sunday", @"Monday", @"Tuesday", @"Wednesday", @"Thursday", @"Friday", @"Saturday"]; 
    _selectedDays = @[]; 

    [tableView reloadData]; 
    ... 
} 

... 

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"DayCell" forIndexPath:indexPath]; 

    UILabel *label = [cell viewWithTag:101]; 
    UIImageView *imageView = [cell viewWithTag:102]; 

    NSString *text = _days[indexPath.row]; 

    label.text = text; 

    if ([_selectedDays containsObject:text]) { 
     imageView.image = [UIImage imageNamed:@"CheckedIcon"]; 
    } else { 
     imageView.image = nil; 
    } 

    return cell; 
} 

... 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    [tableView deselectRowAtIndexPath:indexPath animated:NO]; 

    NSString *text = _days[indexPath.row]; 

    if ([_selectedDays containsObject:text]) { 
     [_selectedDays removeObject:text]; 
    } else { 
     [_selectedDays addObject:text]; 
    } 

    [tableView reloadData]; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return _days.count; 
} 

参考:https://forums.developer.apple.com/message/263637#263637

0

は、それが私

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
. 
. 
. 
. 
[tableView reloadData]; 
[self.view setNeedsDisplay]; 
} 
+0

私はこれを試みたが、私のために働かなかった。私は私のために働いた答えを加えました。 –

関連する問題