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