2011-12-29 41 views
5

私のアプリケーションでは、私はUITableviewを使用しています。そのデリゲートメソッドでは、もし私が何らかの操作をしていればdidselectrowはちょうど起こることができません。再び2行を選択した場合、私は1行を選択した場合、例えばUITableview - tableView:didDeselectRowAtIndexPath:メソッドが正しく動作していませんか?

iはテーブルビュー

3行を有する(indexPath.row == 0)何も

が起こりません(indexPath.row == 1)今以前の値であるコンソールindexPath.row == 0にログインしています。

再度1行を選択すると、以前の値を記録します。indexPath.row = 1。

なぜこのようになりますか。

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

     CustomerInfoViewController *customer = [[EquipmentViewController alloc]initWithNibName:@"CustomerInfoViewController" bundle:nil]; 

    EquipmentViewController *equpment = [[EquipmentViewController alloc]initWithNibName:@"EquipmentViewController" bundle:nil]; 

    ContactsViewController *contacts = [[ContactsViewController alloc]initWithNibName:@"ContactsViewController" bundle:nil]; 

    if(indexPath.row == 0) 
    { 

     NSLog(@"one %d",indexPath.row); 
     [detailsView addSubview:customer.view]; 
    } 

    if(indexPath.row == 1) 
    { 

     NSLog(@"two %d",indexPath.row); 
     [detailsView addSubview:equpment.view]; 
    } 

    if(indexPath.row == 2) 
    { 

     NSLog(@"three%d",indexPath.row); 
     [detailsView addSubview:contacts.view]; 
    } 
} 

私を助けてください。

ありがとうございます。

+1

実際のコードを表示することがありますか? – Vladimir

+0

論理的に正しいと思われます。おそらく初期化をif文にプルします。セクションとは何か関係がありますか?たぶん 'NSLog(@"%d%d "、indexPath.row、indexPath.section);'関数が呼び出されなかったり、コードが間違っているかどうかを調べることができます。問題をよりよく理解するには、いくつかのオプションをクリアする必要があります。 – DAS

答えて

19

ウラジミールが言ったようにあなたが意図

+3

omfg私はこの問題に長続きしすぎました! lol – canhazbits

+0

'didSelectRowAtIndexPath:'は、デフォルトでUITableViewControllerクラスに追加されていましたが、今は 'prepareForSegue:'に置き換えられています。これはまた、多くの人がメソッド名に小さな「De」を気付かず、間違ったメソッドを使用することを意味します。 – runmad

1

間違った方法で実装としてdidDeselectRowAtIndexPath方法、ないdidSelectRowAtIndexPathを実装しました。 didSelectRowAtIndexPathを使用してください

関連する問題