首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >目标C知识库管理的单独类

目标C知识库管理的单独类
EN

Stack Overflow用户
提问于 2011-12-13 04:35:49
回答 4查看 173关注 0票数 1

我正在尝试创建一个泛型类来管理我的键盘,并向该键盘添加一个工具栏。我有几个要访问这个类的ViewControllers。这个类将有几个方法,其中之一是addToolbar

让我们在这里做一个小例子:

当我的MainViewController加载时,它将调用viewDidLoad。通常在viewDidLoad上,它必须创建一个新的工具栏,并通过调用setInputAccessoryView:将其添加到每个文本字段。我想要做的只是调用一个单独的类(我们的键盘管理器),但是键盘管理器需要能够访问MainViewController的文本域并能够对它们调用setInputAccessoryView

这个是可能的吗?如果是这样,我该如何开始使用它呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-12-14 03:39:11

调用viewDidLoad,加载我的MainViewController

代码语言:javascript
复制
- (void)viewDidLoad
{
    [super viewDidLoad];

    keyboard = [[KeyboardScroll alloc]init];
    //we send the text fields to get a tool bar IN ORDER on the view
    NSArray *textFieldArray = [NSArray arrayWithObjects:ccNum, nameOnCard, expMo, expYr, cvv, zip, nickName, pin, nil];
    UIToolbar *toolbar = [keyboard kbToolbarAndNotifReg:textFieldArray];
    for (int i=0;i<[textFieldArray count];i++)
    {
        [[textFieldArray objectAtIndex:i]setInputAccessoryView:toolbar];
    }
}

UIToolbar *toolbar = [keyboard kbToolbarAndNotifReg:textFieldArray];才是真正的东西所在。它注册滚动scrollView的通知(尚未完成),然后keyboard保存textFieldArray以供将来使用,它还创建一个工具栏放在键盘顶部并返回它。然后,我循环并在MainViewController中执行setInputAccessoryView:toolbar

当点击文本字段时,将调用一个通知(我们之前在keyboard中注册的通知之一),并调用keyboard中的一个本地方法,该方法包含我们需要的数组信息。我仍在努力完成这项工作,但到目前为止进展得很顺利。

票数 1
EN

Stack Overflow用户

发布于 2011-12-13 04:46:57

创建一个正式的protocolKeyboardToolbarClient或其他东西,使用一个必需的方法来公开应该向其添加工具栏的所有界面项,怎么样?该协议还可以有一个关联的通知和用于发布该通知的方法;采用该协议的视图控制器将在出现时发布,让管理器知道是时候采取行动了。

然后,您希望拥有此功能的任何视图控制器都会实现该协议;当它出现时,您的键盘管理器对象会向视图控制器请求列表,并可以通过提供的指针执行所需的任何操作。

代码语言:javascript
复制
// KeyboardToolbarClient.h

@protocol KeyboardToolbarClient <NSObject>

- (NSArray *) interfaceItemsNeedingToolbar;

- (void) postDidAppearNotification;

@end

NSString * KTCViewControllerDidAppear = @"KTCViewControllerDidAppear";

每个视图控制器都采用KeyboardToolbarClient

代码语言:javascript
复制
#import "KeyboardToolbarClient.h"

@interface MyViewController : UIViewController <KeyboardToolbarClient>

// etc.

@end

@implementation MyViewController

- (NSArray *) interfaceItemsNeedingToolbar {
    return [NSArray arrayWithObjects: textField1, textField2, 
                                      textField3, nil];
}

- (void) postDidAppearNotification {

    [[NSNotificationCenter defaultCenter] postNotificationName:KTCViewControllerDidAppear 
                                                        object:self 
                                                      userInfo:nil];
}

// etc.

这甚至可能过于复杂。根据您从视图控制器访问键盘管理器的方式(假设管理器是单例的?),您可以在管理器上简单地使用一个方法,将所有有趣的接口对象传递给该方法。

票数 1
EN

Stack Overflow用户

发布于 2011-12-13 04:44:47

也许您应该考虑将UITextField子类化。然后,您的自定义UITextField的每个实例都将知道如何装饰自己(通过您在子类中定义的方法)。在使用自定义文本字段的视图控制器中,您可以在viewDidLoad:中或在最有意义的地方调用这些自定义方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8480470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档