iPhone开发UITextField和UITextView的常见问题
过去两个月我一直在使用iphonesdk。 我观察到的一件事是SDK在获取文本输入方面不是很好 每次我使用UITextView和UITextField时,以下是我必须经常处理的常见问题:iPhone开发UITextField和UITextView的常见问题,iphone,objective-c,uitextfield,uitextview,Iphone,Objective C,Uitextfield,Uitextview,过去两个月我一直在使用iphonesdk。 我观察到的一件事是SDK在获取文本输入方面不是很好 每次我使用UITextView和UITextField时,以下是我必须经常处理的常见问题: 键盘与文本输入重叠 没有隐藏键盘的默认方式 虽然我知道如何处理这两个问题,但首先,我在键盘上滚动显示通知调用的整个视图,并隐藏我知道辞职的FirstResponder。 我是这样处理的 但是我讨厌我的工作方式 我不想在所有的.h和.m文件中复制相同的代码 我喜欢safari键盘像工具栏一样工作的方式 如果在我的
我相信应该有一些可重用的解决方案来解决这个问题,因为这是每个开发人员都必须看到的常见问题 当显示/隐藏键盘时,
UITableView控制器将自动调整其UITableView
的大小。如果您的UI具有类似表格的设计,您可以将控件放在UITableView
中,这样您就不必手动调整大小。虽然这可能是一件痛苦的事情,但苹果怎么可能将该功能编码为每个可能的用例
相反,您需要弄清楚您的常见用例是什么,然后进行相应的编程。这是面向对象的编程-鼓励代码重用!但是,如果您在项目之间进行复制和粘贴,那么您就做错了
例如,对于我来说,在UITableView中输入不属于UITableView控制器的文本是非常常见的。显然,键盘成了我需要解决的问题
那么,我是否每次都要编写必要的代码来修复它?不,我曾经在UITableView子类中编写过一次,并且我在所有项目中都使用该类
记住,好的程序员是懒惰的,他们会使用可用的工具来避免反复编写相同的东西。创建您自己的类、类别等来处理常见问题,您就会没事。有一种方法可以隐藏键盘-告诉textField退出它的第一响应者。如果您有两个,您可以将它们保存在某个数组中,并在该数组上调用makeObjectsPerformSelector方法,并将其传递给@selector(resignFirstResponder)选择器来执行。这将为您节省一些迭代和查找这些文本字段的工作。
Textfield's and scrolling view in up/down's. using NSNotificationCenter code.
Write code in "viewDidLoad":
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector (keyboardDidShow:)
name: UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector (keyboardDidHide:)
name: UIKeyboardDidHideNotification object:nil];
add to code in delegate methods:
-(void) keyboardDidShow: (NSNotification *)notif
{ [calendarView removeFromSuperview];
// If keyboard is visible, return
if (keyboardVisible)
{
NSLog(@"Keyboard is already visible. Ignore notification.");
return;
}
// Keyboard is now visible
keyboardVisible = YES;
}
-(void) keyboardDidHide: (NSNotification *)notif
{ [calendarView removeFromSuperview];
// Is the keyboard already shown
if (!keyboardVisible)
{
NSLog(@"Keyboard is already hidden. Ignore notification.");
return;
}
if (up == 1) {
up = 0;
[self down];
}
// Keyboard is no longer visible
keyboardVisible = NO;
}
add to remaining default methods:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if(textField == txt_Zip){
NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
return !([newString length] > 6);
}
else {
return YES;
}
}
-(void) touchesBegan :(NSSet *) touches withEvent:(UIEvent *)event
{
if(up==1)
{
up=0;
[self down];
}
[txtMake_Model resignFirstResponder];
[txtSerial_Vin resignFirstResponder];
[txtDaysPerWeek resignFirstResponder];
[txtAnnualMiles resignFirstResponder];
[txtPurchasedDate resignFirstResponder];
[txtInterestLocation resignFirstResponder];
[txtInterestSequence resignFirstResponder];
[txtInterestName resignFirstResponder];
[txt_City resignFirstResponder];
[txtAddress1 resignFirstResponder];
[txtAddress2 resignFirstResponder];
[txt_Zip resignFirstResponder];
[txtAdditionalInfo resignFirstResponder];
[txtVehicleNumber resignFirstResponder];
[txtMilesToWork resignFirstResponder];
[txtCostNew resignFirstResponder];
[super touchesBegan:touches withEvent:event ];
}
//- (BOOL)textFieldShouldReturn:(UITextField *)textField // called when 'return' key pressed. return NO to ignore.
//{
// [textField resignFirstResponder];
// return YES;
//}
- (BOOL)textFieldShouldReturn:(UITextField *)textField{
[textField resignFirstResponder];
if (up==1) {
up =0;
[self down];
}
return YES ;
}
- (void)textFieldDidBeginEditing:(UITextField *)textField{
if(textField == txtInterestSequence)
{ if(up==0){up=1;[self moveUp];}
}else if(textField == txtInterestName)
{ if(up==0){up=1;[self moveUp];}
}else if(textField == txtAddress1)
{ if(up==0){up=1;[self moveUp];}
} else if(textField == txtAddress2)
{ if(up==0){up=1;[self moveUp];}
} else if(textField == txt_City)
{ if(up==0){up=1;[self moveUp];}
} else if(textField == txt_Zip)
{ if(up==0){up=1;[self moveUp];}
} else if(textField == txtAdditionalInfo)
{ if(up==0){up=1;[self moveUp];}
} else if(textField == txtMilesToWork)
{ if(up==0){up=1;[self moveUp];}
} else if(textField == txtCostNew)
{ if(up==0){up=1;[self moveUp];}
}
}
-(void)moveUp{
// up=1;
[UIView beginAnimations:nil context:nil];
self.view.center=CGPointMake(self.view.center.x, self.view.center.y-200);
[UIView commitAnimations];
}
-(void)down{
[UIView beginAnimations:nil context:nil];
self.view.center=CGPointMake(self.view.center.x, self.view.center.y+200);
[UIView commitAnimations];
// up=0;
}