2015-03-19 62 views
0

我有一個表格視圖與自定義單元格。在單元格上有用標籤標識的按鈕。 每個按鈕都執行一個動作。例如:傳遞按鈕標籤來執行segue標識符

-(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。

任何幫助,歡迎。

回答

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); 
    } 
} 
+0

謝謝你,但實施你的建議,我不需要if行。我只需要聲明端視圖控制器並將值傳遞給那裏,對嗎? – mvasco 2015-03-19 04:53:56

+0

@mvasco,我只是複製你的代碼,所以我認爲這就是你想要的。你不需要if子句,如果你只有一個segue,但你會如果有多個segues .. – rdelmar 2015-03-19 04:54:54

+0

@rdelmar我只是好奇,你是如何獲取'indexPathForSelectedRow' – 2015-03-19 04:59:05

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 

} 
} 
+0

謝謝,INDEXPATH =(null)的日誌。正如我的例子。 – mvasco 2015-03-19 04:45:49

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] 

} 
+0

謝謝,但你介意給我一個你的建議的代碼示例嗎? – mvasco 2015-03-19 04:46:44

+0

我剛剛編輯了我的答案 – 2015-03-19 04:53:59

+0

謝謝,但使用您的建議SWRevealViewControllers結構會丟失。 – mvasco 2015-03-19 04:55:05