2013-10-10 18 views
31

こんにちは私はiPadアプリで私のmaster controllerにはリストがあり、詳細コントローラの詳細、典型的なUISplitViewControllerパターンがあります。 私が達成したいのは、私の最初の行を最初に選択し、後で私は選択肢をユーザに与えたいということです。 セルのsetSelecteddidSelectRowAtIndexPathの方法でこのような選択を削除しています。最初のセルのUITableViewCell最初に選択されたセット

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [tableView deselectRowAtIndexPath:indexPath animated:NO]; 
    NSIndexPath* path = [NSIndexPath indexPathForRow:0 inSection:0]; 
    UITableViewCell* cell = [tableView cellForRowAtIndexPath:path]; 
    [cell setSelected:NO]; 
} 

それ が私を助けてください後、私なしセルを選択してきています。

+0

あなたは自動的にあなたのtableViewの最初の行を選択したいですか? – wesley

答えて

41

ようdidSelectRowAtIndexPath方法を開始し、アウト手動選択とあなたのtableViewの最初の行を選択したい場合にはこの

NSIndexPath* selectedCellIndexPath= [NSIndexPath indexPathForRow:0 inSection:0]; 
[self tableView:tableViewList didSelectRowAtIndexPath:selectedCellIndexPath]; 
[tableViewList selectRowAtIndexPath:selectedCellIndexPath animated:YES scrollPosition:UITableViewScrollPositionNone]; 

OR

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
if (/* should be selected */) { 
    [cell setSelected:YES animated:NO]; 
} 
} 
8

私はあなたがこの回答を期待しているのか分かりません。デフォルトでは、あなただけのこの

- (void)viewDidAppear:(BOOL)animated { 
    NSIndexPath *indexPath=[NSIndexPath indexPathForRow:0 inSection:0]; 
    [myTableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionBottom]; 
} 
70

を試してみてくださいセルが選択されて表示されるようにするには、-tableView:willDisplayCell:forRowAtIndexPath:の中から-setSelected:animated:を呼び出す必要があります。

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (/* should be selected */) { 
     [cell setSelected:YES animated:NO]; 
    } 
} 

他のところから-setSelectedを呼び出すことは効果がありません。

+15

これは受け入れられる回答でなければなりません。 – RaffAl

+19

この回答はあなたが次の行を追加することができれば素晴らしいでしょう[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];これにより、ユーザーはセルの選択を解除できます。この行が見つからない場合、行を選択解除することはできません。 – cateof

+3

しかし、[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]を使用する場合は、 [tableView:weillDisplayCell:]では正しく動作しないため、[tableView:cellForRowAtIndexPath:]に貼り付ける必要があります。 –

5

また、.mファイル

、POPナビゲーション

.hファイルの場合には

NSIndexPath *defaultSelectedCell 
を助ける viewDidAppearViewDidLoad

defaultSelectedCell= [NSIndexPath indexPathForRow:0 inSection:0]; 

にこのコードを入れてください

[self.tableView selectRowAtIndexPath:defaultSelectedCell animated:NO scrollPosition:UITableViewScrollPositionNone]; 

は、これはPOPとき、助けtableView didSelectRowAtIndexPath方法でviewWillAppear

[self.catTableView selectRowAtIndexPath:defaultSelectedCell animated:NO scrollPosition:UITableViewScrollPositionNone]; 

にこのコードを入れて、

defaultSelectedCell = [NSIndexPath indexPathForRow:indexPath.row inSection:0]; 

は、これが初めてのロードまたはポップナビゲーションのいずれか完全に私を助けます。

19

スウィフト3:選択セル当初

import UIKit 

class MyViewController: UIViewController, UITableViewDelegate { 
    @IBOutlet weak var tableView: UITableView! 
    ... 

    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) { 

     if /* your code here */ == indexPath.row { 
      tableView.selectRow(at: indexPath, animated: false, scrollPosition: UITableViewScrollPosition.none) 
     } 
    } 

    ... 
} 
+2

これは選択された答えです。たぶん、そのifステートメントにチェックを追加して、現在の行でない場合にのみ行を選択するようにします; yはthoを選択します。 –

+1

私はダグラスに同意します。これは正解とマークする必要があります。私は数時間前に解決策を探していましたが、これが私の問題を解決します。 – user30646

+0

@ user30646ここに!..これは正解でなければならないので、私の問題も解決しました! – Pangu

関連する問題