如何在不同的 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

Objective-C - 从不同的类访问属性[重复]

Objective-C:如何从 .NET 的 BitConverter 类中读取数据

Unity如何调用Xcode中的方法