Ios 如何使用协议
我有两个视图控制器 服务提供者 工作位置 在ServiceProvider中,我有一个文本字段和一个选择按钮。 当用户单击“拾取”按钮时,它将重定向到包含位置列表的WorkLocation。 当用户选择任何位置,然后单击WorkLocation中的pick按钮时,它将重定向回带有locationName和Id的ServiceProvider页面。在ServiceProvider页面中,locationName将显示在已经存在的文本字段中 要执行此操作,我使用协议 工作位置声明:Ios 如何使用协议,ios,iphone,ios7,protocols,Ios,Iphone,Ios7,Protocols,我有两个视图控制器 服务提供者 工作位置 在ServiceProvider中,我有一个文本字段和一个选择按钮。 当用户单击“拾取”按钮时,它将重定向到包含位置列表的WorkLocation。 当用户选择任何位置,然后单击WorkLocation中的pick按钮时,它将重定向回带有locationName和Id的ServiceProvider页面。在ServiceProvider页面中,locationName将显示在已经存在的文本字段中 要执行此操作,我使用协议 工作位置声明: #import
#import <UIKit/UIKit.h>
#import "WorkDetailCell.h"
@protocol WorkLocationDetailViewDelegate <NSObject>
@required
-(void)organizationInfo:(NSString *) organization_id name:(NSString *)name;
@end
@interface WorkLocationDetailsViewController :UIViewController < UITableViewDelegate, UITableViewDataSource, UISearchBarDelegate >
{
IBOutlet UITableView *workLocationTableView;
IBOutlet UISearchBar *workLocationSearchBar;
NSMutableArray *workDetailArray,*tempDataArray,*searchArray,*searchResultArray;
BOOL search;
}
@property (nonatomic,retain) id < WorkLocationDetailViewDelegate > delegate;
以及在ServiceProvider实现文件中:
-(void)organizationInfo:(NSString*)organization_id name:(NSString *)name {
NSString *id=organization_id;
txtWorkLocation.text=name;
NSLog(@"%@ %@",organization_id,name);
}
现在,当我从WorkLocation页面返回时,这个方法没有被调用。
服务提供者声明:
您必须将ServiceProvider设置为委托:
[WorkVC setDelegate:self];
为什么不使用prepareforsgue:method来设置目标视图控制器的文本字段?这将使视图控制器之间的通信以标准方式进行,并减少编码工作量
无论如何,实现协议的代码看起来还可以。您需要先检查WorkVC是否已启动,然后再设置其委托。是否已将WorkLocationDetailsViewController委托分配给ServiceProvider类?WorkVC.delegate=self我看不到您将ServiceProvider设置为WorkLocationDetailsViewController的代理的任何地方。@Mikael和spaleja…建议您的方法。如果您理解我在这里试图实现的内容,您在doneButtonClicked:log your delegate:NSLog@%@,U delegate;我已经在我的seviceprovider实现ViewWillDisplay文件中完成了这项操作。-VoidViewWillDisplay:BOOLanimated{usernameLabel.text=[NSString stringWithFormat:@%@],[[NSUserDefaults standardUserDefaults]valueForKey:@first\u name],[NSUserDefaults standardUserDefaults]valueForKey:@last\u name];WorkVC.delegate=self}您在哪里启动WorkLocationDetailsViewController?比如:WorkLocationDetailsViewController*WorkVC=[WorkLocationDetailsViewController alloc]init];如果你明白我想做什么,那么就向我建议你做这件事的方法……或者我对这件事有更多的了解,如果你在WorkLocationDetailsViewController中记录该委托,你会看到什么?是的,我在设置其委托之前启动了WorkVC…但是当我记录(u delegate)时,我得到了空值…你能给出设置委托的代码吗?也许,这能让你对它有更多的了解。
#import "WorkLocationDetailsViewController.h"
@class RadioButtonView;
@class WorkLocationDetailsViewController;
@protocol ServiceProviderProfileDelegate <NSObject>
@required
-(void)setProImages:(UIImage *)img;
@end
@interface ServiceProviderProfileViewController : UIViewController < UINavigationControllerDelegate, UIImagePickerControllerDelegate, RadioButtonDelegate, WorkLocationDetailViewDelegate >
{
NSString *gratuityStr,*paymentStr;
RadioButtonView *gratuityGroup,*paymentGroup;
IBOutlet UILabel *usernameLabel;
NSString *gratuitySelection,*receivePayment;
WorkLocationDetailsViewController *WorkVC;
}
[WorkVC setDelegate:self];