1

我在 iPhone 应用程序中有 2 个视图。FirstViewControllerMultiSelectViewController

里面有FirstViewController一个按钮可以去MultiSelectViewController。在MultiSelectViewController我有一个多选并使用完成按钮tableviewcontroller将结果发送回FirstViewController

我的问题是完成按钮。我不知道如何将数据发送回FirstViewController. 它必须与dissmissviewcontroller.

这是 .h 文件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;

这是我在 .m 文件中的完成按钮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;

 }

最后是我完成的按钮操作:

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

}

我不明白如何发送数据并返回FirstViewController

4

3 回答 3

3

您将 multiselectViewControllerDismissed委托方法重新定义为

 multiselectViewControllerDismissedWithData:(NSMutableArray *)dataSelected

并且,在实现委托的 .h 文件中,FirstViewController

@interface FirstViewController: UIViewController <MultiSelectDelegate> 

FirstViewController.m并在将 MultipleSelectViewController 的委托分配为 self的按钮操作中。IE。,

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

并实施

 -(void)multiselectViewControllerDismissedWithData:(NSMutableArray *)dataSelected  

这种方法在FirstViewController.m

并且,在完成按钮操作方法中,使用委托MultipleSelectViewController.m调用方法,即,multiselectViewControllerDismissedWithData

 [self.myDelegate multiselectViewControllerDismissedWithData:selectedData];  

而已。您现在可以将selectedData数组从MultipleSelectViewControllertoFirstViewController

于 2014-06-30T07:35:30.073 回答
0

在 obj-c 中传递数据的两种标准方式:

  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;
}
于 2014-06-30T07:38:39.557 回答
0

首先将您的委托方法创建为

-(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];

在你的第一个视图控制器中......</p>

导入视图控制器类并调用委托方法..

为第二个视图控制器创建实例...

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

然后

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

NSString *strng=str;
nslog("%@",strng);
}
于 2014-06-30T07:50:50.260 回答