1

セルのデータを表示する UIViewController へのセグエを持つ UITableViewController があります。UIViewController に、次のセルと前のセルを取得するための 2 つのボタンを配置します (UITableViewController に戻って新しいセルを選択する必要はありません)。ボタンの 1 つがクリックされたときに呼び出され、現在のオブジェクトをパラメーターとして送信するデリゲートを作成しました。2 つの質問があります。

  1. UITableViewController メソッドでオブジェクトから indexPath を取得できますか?
  2. 新しい indexPath でセグエを呼び出す関数はありますか?
4

1 に答える 1

0

確かに、デリゲート メソッドを使用して、必要なことを行うことができます。デリゲート メソッドは、他のメソッドと同じように値を返すことができるため、次のようなことができます。この例では、テーブル ビューの選択された行からのデータを表示する ViewController にラベルがあります。ViewController のコードは次のとおりです。

@protocol DetailDelegate <NSObject>
-(NSString *)valueForNextOrPreviousCell:(NSInteger) nextOrPrevious;
@end

@interface ViewController : UIViewController

@property (weak,nonatomic) id <DetailDelegate> delegate;
@property (nonatomic) NSInteger selectedRow;
@property (strong,nonatomic) NSString *dataToDisplay;
@end


@interface ViewController ()
@property (weak,nonatomic) IBOutlet UILabel *label;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.label.text = self.dataToDisplay;
}

-(IBAction)nextOrPreviousClicked:(UIBarButtonItem *)sender {

    if ([sender.title isEqualToString:@"Next"]) {
        self.selectedRow += 1;
    }else{
        self.selectedRow -= 1;
    }

    NSString *data = [self.delegate valueForNextOrPreviousCell:self.selectedRow];
    self.label.text = data;
}

次に、TableController の prepareForSegue メソッドとデリゲート メソッドの実装では、次のようになります。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    NSInteger row = [self.tableView indexPathForSelectedRow].row;
    ViewController *vc = segue.destinationViewController;
    vc.delegate = self;
    vc. selectedRow = row;
    vc.dataToDisplay = self.theData[row];
}


-(NSString *)valueForNextOrPreviousCell:(NSInteger)nextOrPrevious {
    if (nextOrPrevious < 0) nextOrPrevious = 0;
    if (nextOrPrevious >= self.theData.count -1) nextOrPrevious = self.theData.count - 1;
    return self.theData[nextOrPrevious];
}
于 2013-04-26T02:28:56.563 に答える