アイテムのリストを表示するシンプルな UITableView を開発しました。この UITableView の上に、ユーザーが選択した行に移動する UIImageView の形式で選択バーを作成しました。この選択バーの動きも制御する 2 つのボタン (上に 1 つ、下に 1 つ) を作成しました。ユーザーが上ボタンをクリックすると、選択バーは正確に 1 行上に移動し、ユーザーが下ボタンをクリックすると、選択バーは正確に 1 行下に移動します。私の問題は、テーブルの一番上に到達したときに、ユーザーが上ボタンをクリックした場合に選択バーをテーブルの一番下に移動させ、選択バーを一番上に移動させたいことです。ユーザーが下向きのボタンをクリックした場合のテーブル。どちらのボタンも同じメソッドを呼び出します (タグの値に基づいて 2 つのボタンを区別しています)。でも、
2013-06-06 11:34:03.124 SimpleTable[4982:c07] *** Assertion failure in -[UITableViewRowData rectForRow:inSection:], /SourceCache/UIKit_Sim/UIKit-2380.17/UITableViewRowData.m:1630
2013-06-06 11:34:03.207 SimpleTable[4982:c07] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'request for rect at invalid index path (<NSIndexPath 0x9489850> 2 indexes [0, 10])'
なぜこれが起こっているのかわかりません。これは、上下のボタンによって呼び出される関連コードです。
- (IBAction)buttonClicked:(id)sender {
if([sender tag] == 1){
if (_index.row == 0) {
_index = [NSIndexPath indexPathForRow:[_tableData count] inSection:_index.section];
}
else
_index = [NSIndexPath indexPathForRow:_index.row - 1 inSection:_index.section];
[UIView animateWithDuration:.3 animations:^{
CGRect rect = [self.view convertRect:[_table rectForRowAtIndexPath:_index] fromView:_table];
CGFloat floatx = _imageView.frame.origin.x - rect.origin.x;
_imageView.frame = CGRectMake(rect.origin.x + floatx, rect.origin.y, _imageView.frame.size.width, _imageView.frame.size.height);
}];
}
else if([sender tag] == 2){
if (_index.row == [_tableData count]) {
_index = [NSIndexPath indexPathForRow:0 inSection:_index.section];
}
else
_index = [NSIndexPath indexPathForRow:_index.row + 1 inSection:_index.section];
[UIView animateWithDuration:.3 animations:^{
CGRect rect = [self.view convertRect:[_table rectForRowAtIndexPath:_index] fromView:_table];
CGFloat floatx = _imageView.frame.origin.x - rect.origin.x;
_imageView.frame = CGRectMake(rect.origin.x + floatx, rect.origin.y, _imageView.frame.size.width, _imageView.frame.size.height);
}];
}
}
誰かが私が間違っていることを見ることができますか?
回答者全員に事前に感謝します。