2014-06-30 53 views
1

我在iPhone應用程序中有2個視圖。 FirstViewControllerMultiSelectViewController如何使用dismissViewController發回數據

FirstViewController有一個按鈕去MultiSelectViewController。在MultiSelectViewController我有一個tableviewcontroller多選併發送結果返回到FirstViewController完成按鈕

我的問題是完成按鈕。我不知道如何將數據發送回FirstViewController。它必須與dissmissviewcontroller

這是MultiSelectViewController

@protocol MultiSelectDelegate <NSObject> 
-(void) multiselectViewControllerDismissed; 
@end 

@interface MultiSelectViewController : UITableViewController 
{ 
    __weak id myDelegate; 
} 
@property(nonatomic,retain)NSArray *myData; 
@property(nonatomic, retain)NSMutableArray *selectedData; 
@property (nonatomic, weak) id<MultiSelectDelegate> myDelegate; 

.h文件中,這是我在MultiSelectViewController

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
self.tableView.allowsMultipleSelection = YES; 
selectedData=[[NSMutableArray alloc] init]; 
UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" 
                   style:UIBarButtonItemStyleBordered 
                  target:self 
                  action:@selector(multiselectViewControllerDismissed)]; 
self.navigationItem.rightBarButtonItem = barButton; 

} 

.m文件完成按鈕,最後在這裏是我完成按鈕動作:

-(void)multiselectViewControllerDismissed 
{ 
    NSLog(@"%@",selectedData); 

} 

我不明白我如何發送數據並返回FirstViewController

+0

你所需要的值傳遞? – karthikeyan

+0

嘗試這可能是有益的 [dismissModalViewController並傳遞數據回] [1] [1]:http://stackoverflow.com/questions/6203799/dismissmodalviewcontroller-and-pass-data-返回 感謝和歡呼。 –

+0

selectedData,它是一個數組我填充tableview委託如果單元格選擇 – ercan

回答

3

您重新定義 multiselectViewControllerDismissed委託方法

multiselectViewControllerDismissedWithData:(NSMutableArray *)dataSelected 

而且,在FirstViewController .h文件中實現委託即

@interface FirstViewController: UIViewController <MultiSelectDelegate> 

和MultipleSelectViewController的FirstViewController.m分配委託作爲的按鈕操作自。即,

MultipleSelectViewController * msvc = [[MultipleSelectViewController alloc] init]; 
msvc.myDelegate = self; 

和實施

-(void)multiselectViewControllerDismissedWithData:(NSMutableArray *)dataSelected 

這種方法FirstViewController.m

而且,在MultipleSelectViewController.m完成按鈕操作方法,調用方法multiselectViewControllerDismissedWithData與委託即

[self.myDelegate multiselectViewControllerDismissedWithData:selectedData]; 

就是這樣。 您現在可以從MultipleSelectViewController通過selectedData陣列在OBJ-C傳送數據的FirstViewController

+1

感謝您的答案。我改變了完成按鈕的動作 - (void)done if([self.myDelegate respondsToSelector:@selector(multiselectViewControllerDismissed :)]) {self.myDelegate multiselectViewControllerDismissed:selectedData]; } [self dismissViewControllerAnimated:YES completion:nil]; // NSLog(@「%@」,selectedData); }但是我可以發回數據回FirstViewController我不能解僱頁面。我的意思是它留在MultiSelectViewController中 – ercan

0

兩個標準方法:

  1. 使用引用和手動分配。在您的示例中,第一個視圖控制器將其自身的引用傳遞給第二個視圖控制器。第二個視圖控制器使用該引用爲指定的屬性分配所需的數據。
  2. 使用LocalNotifications的發佈者訂閱者模式。第一個視圖控制器監聽特定的位置通知,第二個視圖控制器在被解散之前用數據進行廣播。

我推薦你的第一種方法。一些示例代碼:

在.h文件:

@interface FirstViewController:UIViewController 

@property NSMutableArray *receivedData; //property to receive selected data 

@end 

在.m文件:

MultiSelectViewController *msvc = [MultiSelectViewController alloc] init]; 
msvc.presentingViewController = self; // pass reference of 1st VC to 2nd VC 
[self presentViewController:msvc animated:YES]; 

在MultiSelectViewController.h文件:

#import "FirstViewController.h" 

@interface MultiSelectViewController: UITableViewController 
... 

@property FirstViewController *presentingViewController; 
... 
@end 

在MultiSelectViewController。 m檔案:

-(void)multiselectViewControllerDismissed 
{ 
    NSLog(@"%@",selectedData); 
    presentingViewController.receivedData = selectedData; 
} 
0

首先創建您的委託方法

-(void)dismiss:(NSString *)str; 

而沒有選擇得到基於indexpath.row 一個值,並將其存儲爲的NSString。

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 


    self.valueString=[NSString stringWithFormat:@"%@",[self.arrayValue objectAtIndex:indexPath.row]]; 
    NSLog(@"%d",indexPath.row); 

    } 

完成按鈕點擊:

打電話給你的委託方法像

[self. myDelegate dismiss:"your string which you get from table"] 
[[self navigationController] popViewControllerAnimated:YES]; 

,並在你的第一個視圖控制器...

導入視圖控制器類和調用委託方法..

爲第二個視圖控制器創建實例...

MultiSelectViewController *txtNext=[[MultiSelectViewController alloc]init]; 
    txtNext. myDelegate =self; 

然後

-(void)dismiss:(NSString *)str 
{ 

NSString *strng=str; 
nslog("%@",strng); 
}