在UITableViewController和UIViewController之间传递next / prev单元格数据

时间:2013-04-26 01:20:36

标签: objective-c uiviewcontroller delegates uitableview

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

  1. 我可以从UITableViewController方法中的对象获取indexPath吗?
  2. 是否有一个函数会导致segue使用新的indexPath调用?

1 个答案:

答案 0 :(得分: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];
}