如何在不同的 Objective-C 类中调用 UITextField 委托方法?
Posted
技术标签:
【中文标题】如何在不同的 Objective-C 类中调用 UITextField 委托方法?【英文标题】:How can I call UITextField delegate methods in a different Objective-C class? 【发布时间】:2017-07-14 08:46:31 【问题描述】:我有一个存储大量 UITextField 的 Temp 类。我使用另一个类 EditViewController 来显示这些 UITextField,我想在 EditViewController 类中调用 UITextField 委托。那么我该如何实现呢?
我已经尝试了下面的代码,但没有成功。
ViewController *viewConnection = [self.storyboard instantiateViewControllerWithIdentifier:@"EditViewController"];
tfQue = [[UITextField alloc] initWithFrame:CGRectMake(5, 10, viewLoc.frame.size.width - 90, 25)];
tfQue.placeholder = @"tap here to type description for date";
tfQue.layer.borderWidth = 0;
tfQue.textColor = [UIColor blueColor];
tfQue.tag = tag;
tfQue.delegate = viewConnection;
以上代码写在 Temp 类的函数中。下面是在 EditViewController 中访问该函数的代码:
newElement = [tempObj createTextfieldWithQuestion:strQuestionText withOriginY:posY withIndexTag:i + 1];
[self.view addSubview:newElement];
【问题讨论】:
“我有一个 Temp 类,它存储了很多 UITextField。我使用另一个类 EditViewController 来显示这些 UITextField” - 为什么?将 UI 元素存储在视图/视图控制器之外的目的是什么? 我正在开发一个允许用户创建不同表单/模板的应用程序。所以我有一个通用类,用于存储 Xcode 提供的大部分 UI 元素。 您如何在 EditViewController 中访问/显示 tfQue 文本字段。?? @HirenPrajapati 那么拥有工厂类可能是有意义的,但存储实例非常荒谬。 @luckyShubhra 在 EditVC 中,我调用用于创建 UI 的函数驻留在 Temp 类中。我使用 Temp 类的 Instant 并调用返回 UIView 并存储在 EditVC 视图中的函数。请参阅我更新的问题。 【参考方案1】:传递自我引用以将其分配为 TextField Delegate。
- (UIView *)createTextfieldWithQuestion:(NSString *)strQuestionText withOriginY:(NSInteger)posY withIndexTag:(NSInteger)indexTag setDelegateForUITextField:(id)delegateParent
tfQue = [[UITextField alloc] initWithFrame:CGRectMake(5, 10, viewLoc.frame.size.width - 90, 25)];
tfQue.placeholder = @"tap here to type description for date";
tfQue.layer.borderWidth = 0;
tfQue.textColor = [UIColor blueColor];
tfQue.tag = tag;
tfQue.delegate = delegateParent;
打电话
[tempObj createTextfieldWithQuestion:strQuestionText withOriginY:posY withIndexTag:i + 1 setDelegateForUITextField:self];
【讨论】:
【参考方案2】:我已经解决了这个问题。以下是解决方案。
-(UIView*)createTextfieldWithQuestion: (NSString *)text withOriginY: (CGFloat)posY withIndexTag: (int)tag withTarget:(ViewController *)vc
UIView *viewLoc = [[UIView alloc] initWithFrame:CGRectMake(5, posY, SCREEN_WIDTH - 10, TF_VIEW_HEIGHT)];
viewLoc.backgroundColor = [UIColor whiteColor];
tfQue = [[UITextField alloc] initWithFrame:CGRectMake(5, 10, viewLoc.frame.size.width - 90, 25)];
tfQue.placeholder = @"tap here to type description for date";
tfQue.layer.borderWidth = 0;
tfQue.textColor = [UIColor blueColor];
tfQue.tag = tag;
tfQue.delegate = vc;
...
...
[viewLoc addSubview:tfQue];
return viewLoc;
以上代码写在 Temp 类的函数中。下面是在 EditViewController 中访问该函数的代码:
newObj = [tFunc createTextfieldWithQuestion:strQuestionText withOriginY:posY withIndexTag:i + 1 withTarget:self];
[self.view addSubview:newElement];
【讨论】:
以上是关于如何在不同的 Objective-C 类中调用 UITextField 委托方法?的主要内容,如果未能解决你的问题,请参考以下文章
自己的类中的objective-c源locationManager
如何从 Swift 调用 Objective-C 类的工厂方法?
在 Objective-C 类中使用时如何自定义 SDCAlertView