2011-04-05 26 views
3

我過去2個月一直在使用iPhone SDK。 我觀察到的一件事是SDK在獲取文本輸入方面不太好。iPhone開發UITextField和UITextViews的常見問題

每次我使用一個UITextView,同時也是UITextField下面是常見的問題,我總是不得不面對:

  1. 鍵盤重疊的TextInput。
  2. 沒有隱藏鍵盤的默認方法。

雖然我知道如何處理兩者,第一,我在keyboardshown通知調用中滾動整個視圖並隱藏我知道的resignFirstResponder。 這是我如何處理這個。

但我討厭我的工作方式!

我不想在所有.h和.m文件中複製相同的代碼。

我喜歡safari鍵盤的工作方式,像工具欄。

如果在我的項目中有任何可重複使用的類可以用於解決問題,請向我諮詢。 我相信應該有一些可重用的解決方案來解決這個問題,因爲這是每個開發者都必須看到的常見問題!

+1

http://www.edumobile.org/iphone/iphone-programming-tutorials/scrollview-example-in-iphone/ – Raj 2011-09-20 11:27:15

+0

有一種方法來隱藏鍵盤 - 告訴文本框辭職這是第一個響應。如果你有幾個你可以將它們保存在一個數組中,並在該數組上調用makeObjectsPerformSelector方法,傳遞它的@selector(resignFirstResponder)選擇器來執行。這應該可以爲您節省一些迭代工作並找到這些文本字段。 – Ariel 2011-11-22 22:47:18

回答

0

UITableViewController將在鍵盤顯示/隱藏時自動調整其UITableView的大小。如果您的UI具有類似桌面的設計,則可以將控件放置在UITableView的內部,這樣您就不必手動實施大小調整。

0

雖然這可能是一種痛苦,但蘋果怎麼可能編寫該功能來解釋每一種可能的用例?

相反,你需要弄清楚你的常見用例是什麼,然後進行相應的編程。這是面向對象的編程 - 鼓勵代碼重用!但是,如果你在項目之間複製和粘貼,你做錯了。

例如,對於我來說,在UITableViews中進行文本輸入並非UITableView控制器的一部分,這種做法非常普遍。顯然,鍵盤成爲我需要修復的問題。

那麼,我是否每次編寫必要的代碼來修復它?不,我在UITableView子類中寫過一次,並在我的所有項目中使用該類。

請記住,優秀的程序員是懶惰的,會使用可用的工具來避免一遍又一遍地寫同樣的東西。創建你自己的班級,類別等來處理你的常見問題,你會沒事的。

0
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; 
}