web-dev-qa-db-ja.com

UITableViewdidSelectRowAtIndexPathが最初のタップで呼び出されない

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);
}
27
meggy.meng

実装した可能性があります(選択解除に注意してください):didDeselectRowAtIndexPath

...したがって、最初のセルの選択を解除する新しいセルを選択し、indexPathを最初のセルとしてログに記録するとトリガーが発生します。

解決策:didSelectRowAtIndexPath

ええ、それらは非常によく似ており、didDeselectRowAtIndexPathがXcodeのオートコンプリートがほとんどの場合に選択する最初の方法であることは役に立ちません。

完全なコード:

// right
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {}
34
Jan Carlo Viray

-viewDidLoadを以下のコードに変更してみてください(最後の行を挿入してください)。結果について教えてください。

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.tableView.delegate = self;
    self.tableView.dataSource = self;
    [self.tableView reloadData];
}
1
kpower

これが答えられたかどうかはわかりませんが、私はこの問題を実行していて、上記の「AnnaKarenina」のようにしています。細部に細心の注意を払うようにしてください。

これは、DEselectを実装したことが原因です。

-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath

これにより、最初のクリックは機能しなくなりますが、その後のクリックと他のセルは期待どおりに機能します。

解決策:注意を払い、didSelectRowAtIndexPathを使用するようにしてください

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

これが「AnnaKarenina」によって解決される前に私が述べたように、それが役立つことを願っています

1
Jiraheta

別のVCにデータを渡すときにもこの問題が発生しました。テーブルVCから詳細VCに手動セグエに切り替えることで、それを解決しました。

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        selectedData = data[indexPath.row]

        performSegue(withIdentifier: "Detail", sender: self)
}
0
MikeJ

ストーリーボード内のビューにUIGestureRecognizerがありました。私はそれを取り除く必要があり、それは通常のように機能しました。

0
tuvok

このコードをviewDidLoadメソッドに追加します

[self.tableView reloadData]
0
vinay

Xibからファイル所有者にデリゲートを接続してください。次に、それが機能することを試してください。

0
Jaha Rabari