我有自定义单元格的表格视图。在单元格上有用标签标识的按钮。 每个按钮都执行一个动作。例如:
-(void)mapa_button_action:(UIButton*)sender
{
NSLog(@"CANCELAR BUTTON CLICKED=%ld",(long)sender.tag);
NSString *employee =[[historialServicios objectAtIndex:sender.tag] valueForKey:@"driverId"];
NSLog(@"EMPLOYEE=%@",employee);
[self performSegueWithIdentifier:@"mapa_conductor_segue" sender:self];
}
如您所见,该按钮标识为sender.tag属性。 在这种情况下,动作执行segue,然后执行prepareForSegue方法,我可以将变量传递给新的视图控制器。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"mapa_conductor_segue"]) {
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
NSLog(@"INDEXPATH=%@",indexPath);
}
}
我需要的是从所选单元格中检索值到新视图控制器。 我能够在map_button_action方法中获取值,但我不知道如何将这些值传递给新控制器。
我必须使用performSegueWithIdentifier操作才能维护视图控制器结构,我正在使用SWRevealViewControllers。
欢迎任何帮助。
答案 0 :(得分:3)
当您调用performSegueWithIdentifier:sender时,您将无用的参数作为发件人传递。如果你想在prepareForSegue中使用该按钮的标签,那么将该标签(转换为NSNumber)设置为发送者 - 你可以在该参数中传递你想要的任何对象,它将是prepareForSegue中的发送者
-(void)mapa_button_action:(UIButton*)sender
{
NSLog(@"CANCELAR BUTTON CLICKED=%ld",(long)sender.tag);
NSString *employee =[[historialServicios objectAtIndex:sender.tag] valueForKey:@"driverId"];
NSLog(@"EMPLOYEE=%@",employee);
[self performSegueWithIdentifier:@"mapa_conductor_segue" sender:@(sender.tag)];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(NSNumber *)sender {
NSInteger tag = sender.integerValue;
// do whatever you need to with the tag
if ([segue.identifier isEqualToString:@"mapa_conductor_segue"]) {
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
NSLog(@"INDEXPATH=%@",indexPath);
}
}
答案 1 :(得分:1)
试试这个
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"mapa_conductor_segue"]) {
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
NSLog(@"INDEXPATH=%@",indexPath);
DestinationViewController *objeDest=segue.destinationViewController;
objeDest.destinationIndexPath=indexPath
}
}
答案 2 :(得分:1)
在目标ViewController
中创建一个属性(您需要传入数据的类型)。您可以在当前ViewController
中创建目标控制器的对象,并在map_button_action
方法中设置此对象的值以执行您想要的操作。
//DestinationViewController.h
@interface DestinationViewController : UIViewController
@property (nonatomic,strong) (SomeDataType*) propertyName;
@end
//CurrentViewController.m
#import DestinationViewController
....
map_button_action{
DestinationViewController *obj = [DestinationViewController new];
obj.propertyName = someValue;
[self.navigationController pushViewController:obj animated:YES]
}