您的位置:首页 > 产品设计 > UI/UE

转:为UIKeyboardTypeNumberPad增加自定义按键

2011-05-27 16:41 405 查看
这篇英文较简单,就懒得翻译了。

If
you have ever written an iPhone app that requires numeric input,then
you surely know about the UIKeyboardTypeNumberPad. And if you haveever
used that flavor of the iPhone's keyboard, then you surely knowthat it
lacks one very important feature: The UIKeyboardTypeNumberPaddoes not
have a "return" key.
In fact every other keyboard type (except for
the pretty similarUIKeyboardTypePhonePad) does offer the possibility to
be dismissed bysetting the returnKeyType property of the
correspondingUITextInputTraits implementor. So how does one achieve the
same effectwith the number pad? We have found a workround!
When
looking at the number pad, you'll notice that there is anunused space on
its bottom left. That's where we are going to plug inour custom
"return" key.



To
make it short: take a screenshot, cut out the whole backspacekey, flip
it horizotally, clear its backspace symbol in Photoshop andoverlay it
with the text that we want on our “return” key. We’ve chosento label it
“DONE”. Now we have the image for our
custombutton’s UIControlStateNormal. Repeat the whole procedure (with
atouched backspace key when taking the screenshot) to get a second
imagefor our button’s UIControlStateHighlighted. Here’s the result:





Now
back to coding. First we need to know when the number pad isgoing to be
slided up on the screen so we can plug in our custom buttonbefore that
happens. Luckily there’s a notification for exactly thatpurpose, and
registering for it is as easy as:

[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
[/pre]Don't
forget to remove the observer from the notification center in the
appropriate place once you're done with the whole thing:

[[NSNotificationCenter defaultCenter] removeObserver:self];[/pre]Now
we’re getting to the heart of it. All we have to do in
thekeyboardWillShow method is to locate the keyboard view and add
ourbutton to it. The keyboard view is part of a second UIWindow of
ourapplication as others have already figured out (see this thread).So
we take a reference to that window (it will be the second window inmost
cases, so objectAtIndex:1 in the code below is fine), traverse itsview
hierarchy until we find the keyboard and add the button to itslower
left:

- (void)keyboardWillShow:(NSNotification *)note {
// create custom button
UIButton *doneButton = [UIButton buttonWithType:UIButtonTypeCustom];
doneButton.frame = CGRectMake(0, 163, 106, 53);
doneButton.adjustsImageWhenHighlighted = NO;
[doneButton setImage:[UIImage imageNamed:@"DoneUp.png"] forState:UIControlStateNormal];
[doneButton setImage:[UIImage imageNamed:@"DoneDown.png"] forState:UIControlStateHighlighted];
[doneButton addTarget:self action:@selector(doneButton:) forControlEvents:UIControlEventTouchUpInside];

// locate keyboard view
UIWindow* tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1];
UIView* keyboard;
for(int i=0; i<[tempWindow.subviews count]; i++) {
keyboard = [tempWindow.subviews objectAtIndex:i];
// keyboard view found; add the custom button to it
if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES)
[keyboard addSubview:doneButton];
}
}[/pre]Voilà,
that’s it! The empty space for our button starts atcoordinate (0, 163)
and has the dimensions (106, 53). The doneButtonmethod has to be written
now of course, but that’s not hard any more.Just make sure that you
call resignFirstResponder on the text fieldthat is being edited to have
the keyboard slide down.



原帖:http://www.cocoachina.com/bbs/simple/?t3999.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: