48

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

-(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];
} 

最初のセルですが、その後、私のなしのセルが選択されています。助けてください。

4

12 に答える 12

88

セルが選択されているように表示するには、次のように-setSelected:animated:内部から呼び出す必要があります。-tableView:willDisplayCell:forRowAtIndexPath:

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

他の場所から呼び出し-setSelectedても効果はありません。

于 2014-08-04T22:15:16.540 に答える
48

Swift 4:最初にセルを選択する

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: UITableView.ScrollPosition.none)
        }
    }

    ...
}
于 2016-12-28T12:41:25.543 に答える
10

あなたがこの答えを期待しているのかわかりません。デフォルトでは、手動で選択せずに tableView の最初の行を選択する場合は、次のdidSelectRowAtIndexPathようにメソッドを開始するだけです

- (void)viewDidAppear:(BOOL)animated {
    NSIndexPath *indexPath=[NSIndexPath indexPathForRow:0 inSection:0];
    [myTableView selectRowAtIndexPath:indexPath animated:YES  scrollPosition:UITableViewScrollPositionBottom];
}
于 2013-10-10T12:29:00.367 に答える
7

最良の選択肢

スイフト5

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    if shouldSelectThisRow {
        tableView.selectRow(at: indexPath, animated: false, scrollPosition: .none)
    } else {
        tableView.deselectRow(at: indexPath, animated: false)
    }
}
于 2019-04-17T07:07:28.080 に答える
5

POPナビの場合にも役立ちます

.h ファイル、

NSIndexPath *defaultSelectedCell

.m ファイル

このコードを入れてViewDidLoad

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

viewDidAppear

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

これは、ポップするときに役立ちます。このコードを入れてくださいviewWillAppear

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

tableView didSelectRowAtIndexPathメソッドで、

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

これは、最初の読み込み時またはポップ ナビゲーションのいずれかで完全に役立ちます。

于 2015-07-19T12:11:05.077 に答える