1

未知の深さを通り抜ける絵コンテを作っています。私がやっていることは、UITableViewCell からそのメイン ビュー コントローラーへのループ セグエを作成することです。perforSegueWithIdentifier では、次のレベルの情報を渡しています。

それはすべて正常に機能しますが、問題は、そのデータに基づいて詳細ビューに分岐したい場合です。ボタンとファントムビューのセグエを備えたハックに頼らなければなりません。これを正式に行う方法を知っている人はいますか?UITableViewCell を 2 つの異なるコントローラーにリンクしてから、performSegueWithIdentifier でどちらに移動するかを決定できるようにしたいと考えています。これは可能ですか?

4

2 に答える 2

1

ストーリーボードの経験はあまりありませんが、従来のUITableViewの使用法について知っていることから、セルはビューコントローラーに何をすべきかを指示するべきではありません。これを行うと、MVCパラダイムが破られます。セルのテーブルビューのデリゲート(通常はテーブルビューを表示するビューコントローラー)がメソッドに応答しtableView:didSelectRowAtIndexPath:、次のビューコントローラーに対して適切なセグエを実行します。

詳細ビューを表示するために、テーブルビューセルはアクセサリタイプを提供しますUITableViewCellAccessoryDetailDisclosureButton。このタイプを使用する場合、テーブルビューデリゲートはセレクターに応答してからtableView:accessoryButtonTappedForRowWithIndexPath:、詳細ビューを表示するために必要なセグエを実行できます。

それが理にかなっていることを願っています。

于 2012-12-18T11:35:25.583 に答える
0

昔、似たようなことをしました。

「公式」の解決策は見つかりませんでしたが、見つけた解決策の 1 つは、通常の選択に加えて、ユーザーを詳細ビューに導く長押しジェスチャ認識機能をセルに追加することでした。

ただし、唯一の欠点は、この「非表示」オプションを何らかの方法でユーザーに通知する必要があることです。

以下は、viewDidLoad のコード フラグメントです。

UILongPressGestureRecognizer *taskDetail = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(showTaskDetail:)];
taskDetail.minimumPressDuration=0.5f;
taskDetail.numberOfTouchesRequired=1;
[self.myTableView addGestureRecognizer:taskDetail];

次に、私の taskDetail で:

-(IBAction)showTaskDetail:(id)sender {
    UILongPressGestureRecognizer *gesture = (UILongPressGestureRecognizer*)sender;
    if (gesture.state == UIGestureRecognizerStateBegan) {
        CGPoint p = [gesture locationInView:TV];
        NSIndexPath *indexPath = [self.myTableView indexPathForRowAtPoint:p];
        MyManagedObj *obj = [self.datasource objectAtIndex:indexPath.row];
        // other operations omitted...
        // then perform segue... 
        [self performSegueWithIdentifier:@"taskDetail" sender:indexPath];

    }
}

私が試した他の解決策は、UITableViewCell の 2 つのボタンで、1 つはテーブルのドリルダウン用、もう 1 つは詳細用です。それも機能しますが、私のセルは小さすぎて、2 つのボタンを配置するスペースがあまりありませんでした。

于 2012-12-18T11:19:00.417 に答える