Ios 如何使用dismissViewController发回数据
我在iPhone应用程序中有两个视图Ios 如何使用dismissViewController发回数据,ios,iphone,objective-c,ipad,popviewcontroller,Ios,Iphone,Objective C,Ipad,Popviewcontroller,我在iPhone应用程序中有两个视图FirstViewController和MultiSelectViewController 在FirstViewController中,有一个按钮可转到MultiSelectViewController。在MultiSelectViewController中,我有一个tableviewcontroller可以使用“完成”按钮进行multiselect并将结果发送回FirstViewController 我的问题是“完成”按钮。我不知道如何将数据发送回First
FirstViewController
和MultiSelectViewController
在FirstViewController
中,有一个按钮可转到MultiSelectViewController
。在MultiSelectViewController
中,我有一个tableviewcontroller
可以使用“完成”按钮进行multiselect并将结果发送回FirstViewController
我的问题是“完成”按钮。我不知道如何将数据发送回FirstViewController
。它必须与dissmissviewcontroller
一起使用
这是MultiSelectViewController的.h文件
@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;
- (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;
}
最后是我的按钮动作:
-(void)multiselectViewControllerDismissed
{
NSLog(@"%@",selectedData);
}
我不明白如何发送数据并返回到您重新定义的FirstViewController
中
@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;
- (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;
}
multiselectViewControllerDismissed
将方法委派为
multiselectViewControllerDismissedWithData:(NSMutableArray *)dataSelected
并且,在FirstViewController
的.h文件中实现委托,即
@interface FirstViewController: UIViewController <MultiSelectDelegate>
[self.myDelegate multiselectViewControllerDismissedWithData:selectedData];
实施
-(void)multiselectViewControllerDismissedWithData:(NSMutableArray *)dataSelected
此方法在FirstViewController.m
并且,在MultipleSelectViewController.m
的“完成”按钮操作方法中,调用方法multiselectviewcontrollerdissistedwithdata
,即
@interface FirstViewController: UIViewController <MultiSelectDelegate>
[self.myDelegate multiselectViewControllerDismissedWithData:selectedData];
就这样。
您现在可以将selectedData
数组从MultipleSelectViewController
传递到FirstViewController
在obj-c中传递数据的两种标准方式:
@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;
- (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;
}
使用引用并手动分配。在您的示例中,第一个视图控制器将自身的引用传递给第二个视图控制器。第二个视图控制器使用引用为指定的属性指定所需的数据
使用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;
}
首先将委托方法创建为
-(void)dismiss:(NSString *)str;
而select是否根据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;
然后
您需要传递什么值?尝试此操作可能会有所帮助[dismissModalViewController AND pass data back][1][1]:谢谢和干杯。selectedData,这是我在tableview中填充的数组代理如果选择了cell,请完成此处描述的步骤谢谢回答。我更改了“完成”按钮的操作-(void)done{if([self.myDelegate respondsToSelector:@selector(multiselectviewcontrollerdissed:)){[self.myDelegate multiselectviewcontrollerdissed:selectedData];}[self dismissionviewcontrolleranimated:YES completion:nil];//NSLog(@“%@”,selectedData);}但是,我可以将数据发送回FirstViewController,我无法关闭页面。我的意思是它留在MultiSelectViewController中