2010-08-04 61 views
6

我正在寻找一个非hackish解决方案,因此基本上-inputView。我不确定的部分是如何使它看起来像常规键盘,从背景到键。我意识到,我可以使用苹果电脑的photoshop,但是这看起来似乎有些ha,,特别是如果苹果(可能不是但仍然有可能)决定改变键盘的外观。我知道Numbers在制作看起来像标准系统的键盘方面做得非常出色,我想这样做(尽管显然他们可以访问使系统键盘相同的资源,包括可能的私有框架,等等)自定义iPad键盘,看起来像系统键盘

回答

0

创建视图控制器和xib。 xib应该有1-9,0和删除按钮映射到您的控制器中的IBOutlets。将返回值字符串存储并保留为属性。如果您愿意,您可以添加小数等。在标题中,存储带有属性的版本块闭包(或者创建委托或使用通知)。

@property (copy) void(^valueChangedBlock)(NSString* string); 

在触摸起来,每个按钮将事件发送到这样的方法:

- (IBAction) pressKey:(id)sender 
{ 
    NSString *toAppend; 

    // Instead of this switch you can store the values in a dictionary mapped by sender. 
    switch(sender) 
    { 
     case oneButton: [email protected]"1"; break; 
     case twoButton: [email protected]"2"; break; 
     ... 
    } 

    returnValue = [returnValue appendString:toAppend]; 
    valueChanged(returnValue); 
} 

显然删除键应该从字符串的末尾,而不是追加删除一个字符。除了创建控制器并将此视图添加为inputView之外,您应该添加valueChangedBlock并将其设置为更新文本字段。您可能希望在文本字段集上放置一个清晰的自定义按钮,以使字段第一响应者不会出现,就好像用户可以在字符串中的任何位置进行编辑一样。

+0

喜彼得,在我的情况下,上面的代码给出了类似的错误:指针不允许为案例值。哪里不对?我该怎么办?请帮忙 – 2010-11-09 08:16:26

+0

我写了那个代码作为例子,但需要一些修改。尝试使用if-else语句来检查发件人的身份,或者甚至更好的是,在控制器初始化期间为pressKey方法中的单行查找,将按钮及其结果值存储在字典中。 – 2010-11-09 13:41:55

2

我使用了以下内容:

tenDigitKeyboard.m

-(IBAction)pressedKey:(UIButton *)sender 
{ 
    [delegate pressedKey:sender.tag]; 
} 

其中代表被定义为`ID代表;

然后在委托我做...

-(void)pressedKey:(NSInteger)key 
{ 
    NSString * bufferString = model.string; 
    if (key == -1) {//delete 
     model.string = [bufferString substringWithRange:NSMakeRange(0, [bufferString length]-1)]; 
    }else{ 
    //will need to change the following to lookup key value based on a lookup of the button.tag 
     model.string = [bufferString stringByAppendingFormat:@"%i",key]; 
    } 
    [self update];//updates the view 
} 

我从键盘按键艺术品:http://www.teehanlax.com/blog/iphone-gui-psd-v4/