IOS5のUITableViewのdidSelectRowAtIndexPathに問題があります。これはiOS4では正しいです。
テーブルの任意の行を初めてタップすると、メソッドは呼び出されません。別の行を選択すると、didSelectRowAtIndexPathが呼び出されますが、最後のindexPathが渡されます。
TableView.delegateはすでに設定しており、ios4で正しく実行できます。
MainView.xib
UITabBarController
--UINavigationController
--**UITableViewController**
助言がありますか?
- (void)viewDidLoad
{
[super viewDidLoad];
self.tableView.delegate = self;
self.tableView.dataSource = self;
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 10;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
cell.textLabel.text = [[NSString alloc]initWithFormat:@"%d",indexPath.row];
return cell;
}
#pragma mark - Table view delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"%d",indexPath.row);
}
実装した可能性があります(選択解除に注意してください):didDeselectRowAtIndexPath
...したがって、最初のセルの選択を解除する新しいセルを選択し、indexPathを最初のセルとしてログに記録するとトリガーが発生します。
解決策:didSelectRowAtIndexPath
ええ、それらは非常によく似ており、didDeselectRowAtIndexPath
がXcodeのオートコンプリートがほとんどの場合に選択する最初の方法であることは役に立ちません。
完全なコード:
// right
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {}
-viewDidLoad
を以下のコードに変更してみてください(最後の行を挿入してください)。結果について教えてください。
- (void)viewDidLoad
{
[super viewDidLoad];
self.tableView.delegate = self;
self.tableView.dataSource = self;
[self.tableView reloadData];
}
これが答えられたかどうかはわかりませんが、私はこの問題を実行していて、上記の「AnnaKarenina」のようにしています。細部に細心の注意を払うようにしてください。
これは、DEselectを実装したことが原因です。
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
これにより、最初のクリックは機能しなくなりますが、その後のクリックと他のセルは期待どおりに機能します。
解決策:注意を払い、didSelectRowAtIndexPath
を使用するようにしてください
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
これが「AnnaKarenina」によって解決される前に私が述べたように、それが役立つことを願っています
別のVCにデータを渡すときにもこの問題が発生しました。テーブルVCから詳細VCに手動セグエに切り替えることで、それを解決しました。
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
selectedData = data[indexPath.row]
performSegue(withIdentifier: "Detail", sender: self)
}
ストーリーボード内のビューにUIGestureRecognizerがありました。私はそれを取り除く必要があり、それは通常のように機能しました。
このコードをviewDidLoadメソッドに追加します
[self.tableView reloadData]
Xibからファイル所有者にデリゲートを接続してください。次に、それが機能することを試してください。