自定义iPad键盘,外观与系统键盘相同

6

我正在寻找一种非hackish的解决方案,所以基本上是-inputView。 我不确定的部分是如何使它看起来像常规键盘,从背景到按键。 我意识到我可以用Photoshop制作一个苹果键盘,但这似乎有点hackish,特别是如果苹果(可能不会,但仍有可能)决定更改其键盘的外观。 我知道Numbers已经非常出色地制作了额外的键盘,看起来像标准系统键盘,我想像那样做(尽管显然他们可以访问制作系统键盘的相同资源,包括可能的私有框架等。)

2个回答

2
我使用了以下内容:
tenDigitKeyboard.m
-(IBAction)pressedKey:(UIButton *)sender
{
    [delegate pressedKey:sender.tag];
}

其中delegate被定义为`id delegate;

然后在delegate中我做了...

-(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/

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: toAppend=@"1"; break;
        case twoButton: toAppend=@"2"; break;
        ...
    }

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

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


嗨Peter,对于我的情况,上面的代码会出现错误,如:指针不允许作为case值。是什么问题?我该怎么办?请帮忙。 - Parth Bhatt
我写了那段代码作为示例,但需要进行一些修改。尝试使用if-else语句来检查发送者是谁,或者更好的方法是在控制器初始化期间将按钮及其结果值存储在字典中,以便在pressKey方法中进行单行查找。 - Peter DeWeese

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接