1

我有一个 UITableViewController 与一个显示单元格数据的 UIViewController 的 segue。在 UIViewController 我想放置两个按钮来获取下一个单元格和上一个单元格(无需导航回 UITableViewController 并选择一个新单元格)。我创建了一个委托,当单击其中一个按钮时调用该委托并将当前对象作为参数发送。我有两个问题:

  1. 我可以从 UITableViewController 方法中的对象获取 indexPath 吗?
  2. 是否有一个函数会导致 segue 使用新的 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 回答