2012-06-26 26 views

回答

14

您可以創建一個輸入附件視圖,它可以在鍵盤上方顯示UIToolBar,然後在其上添加一個取消按鈕。查看下面的文檔鏈接,瞭解inputAccessoryView屬性。

http://developer.apple.com/library/ios/#documentation/uikit/reference/UITextField_Class/Reference/UITextField.html

這是一個我爲一個TextView的一個例子。創建輸入附件視圖方法是從「textViewDidBeginEditing」中調用的。然後創建輸入附件視圖,在我的情況下添加三個按鈕和一個空格鍵。

我希望有幫助。

-(void)textViewDidBeginEditing:(UITextView *)textView { 

[self createInputAccessoryView]; 
[textView setInputAccessoryView:_inputAccessoryView]; 
self.myTextView = textView; } 

-(void)createInputAccessoryView { 

_inputAccessoryView = [[UIToolbar alloc] init]; 
_inputAccessoryView.barStyle = UIBarStyleBlackOpaque; 
[_inputAccessoryView sizeToFit]; 

_inputAccessoryView.frame = CGRectMake(0,_collageView.frame.size.height - 44, _collageView.frame.size.width, 44); 

UIBarButtonItem *fontItem = [[UIBarButtonItem alloc] initWithTitle:@"Font" 
                  style:UIBarButtonItemStyleBordered 
                  target:self action:@selector(changeFont:)]; 
UIBarButtonItem *removeItem = [[UIBarButtonItem alloc] initWithTitle:@"Remove" 
                  style:UIBarButtonItemStyleBordered 
                  target:self action:@selector(removeTextView:)]; 
//Use this to put space in between your toolbox buttons 
UIBarButtonItem *flexItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace 
                      target:nil 
                      action:nil]; 
UIBarButtonItem *doneItem = [[UIBarButtonItem alloc] initWithTitle:@"Done" 
                  style:UIBarButtonItemStyleDone 
                  target:self action:@selector(dismissKeyBoard:)]; 

NSArray *items = [NSArray arrayWithObjects:fontItem,removeItem,flexItem,doneItem, nil]; 
[_inputAccessoryView setItems:items animated:YES]; 
[_myTextView addSubview:_inputAccessoryView]; 
} 
+0

感謝這一點,雖然如果你只是做一個取消按鈕,不會在UITextField旁邊放一個取消'UIBarButtonItem'來完成同樣的事情而沒有輔助視圖? –

+0

想想吧,那正是我要做的。儘管這是一個非常好的答案,但它絕對能解決我的問題,並將其標記爲已接受。 –

+0

@kevinhorgan爲什麼你沒有將self.myTextView直接分配給輸入屬性? – Camus

0

安德魯,最近怎麼樣?它是迪瑪R!

據我所知,沒有很好的方法來做你想做的事情。您可以輕鬆地列出在類型內置的一個挑here

typedef enum { 
    UIReturnKeyDefault, 
    UIReturnKeyGo, 
    UIReturnKeyGoogle, 
    UIReturnKeyJoin, 
    UIReturnKeyNext, 
    UIReturnKeyRoute, 
    UIReturnKeySearch, 
    UIReturnKeySend, 
    UIReturnKeyYahoo, 
    UIReturnKeyDone, 
    UIReturnKeyEmergencyCall, 
} UIReturnKeyType; 

你可以做什麼或者添加包含您的取消按鈕鍵盤的頂部視圖,或者嘗試通過視圖層次遍歷並以這種方式覆蓋按鈕上的按鈕(儘管此方法不可靠)。不幸的是,這是Apple尚未提供太多定製的一件事。

編輯:其實我認爲我從一開始就誤讀了你的問題,因爲你不希望取消按鈕作爲主返回按鈕。在這種情況下,輸入附件視圖肯定是要走的路。

+1

哇,真是個倒退,很高興在這裏見到你。並感謝您的答案。是的,我想給用戶一個額外的取消按鈕,以防他們想取消文本輸入。 –

+1

Kevin Horgan的答案就是你想要的答案,這是實現這一目標的正確方法。 – Dima

1

我剛剛投下了UIToolbar到在Interface Builder我的視圖控制器,然後:

@property IBOutlet UIToolbar *keyboardAccessory; 

-(void) viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    // this is so I can edit it in Interface Builder, but it doesn't show in the view 
    [keyboardAccessory removeFromSuperview]; 
} 

-(BOOL) textFieldShouldBeginEditing:(UITextField*)textField { 
    textField.inputAccessoryView = keyboardAccessory; 
    return YES; 
} 

-(IBAction) pressedCancelButton { 
    [self.view endEditing:YES]; 
} 

瞧!

相關問題