2013-11-20 32 views
5

我試圖實現類似的消息在iOS 7中的鍵盤交互。我有一個UIView其中包含UITextView,並且當用戶選擇它開始輸入時,我想使這UIViewinputAccessoryView。這會照顧動畫的我,以及新UIScrollView鍵盤辭退相互作用的iOS 7使UITextView父項成爲其自己的inputAccessoryView

UITextView開始編輯,我正在嘗試設置其inputAccessoryView其父UIView(這已經是視圖層次結構)。鍵盤出現,但沒有附件視圖。

我讀過一些人正在使用UITextField的二人組來完成這項工作,但這似乎是一個不錯的方法來實現這一目標。

有什麼建議嗎?

回答

0

要使它正常工作的唯一方法是通過第二個文本字段。這個想法是使它成爲一個子視圖,但不可見(由於瘋狂的矩形)。然後,在獲取委託方法的同時,將firstResponder在它和真實文本字段之間來回切換。我創建了一個有人的viewController測試項目,這樣做,(你可以複製粘貼和驗證與約2分鐘的時間特性):

@implementation ViewController 
{ 
    UITextField *field; 
    UITextField *dummyView; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    field = [[UITextField alloc] initWithFrame:CGRectMake(0, 460, 320, 20)]; 
    field.borderStyle = UITextBorderStyleRoundedRect; 
    field.delegate = self; 
    //field.inputAccessoryView = field; 
    field.text = @"FOO"; 
    [self.view addSubview:field]; 

    dummyView = [[UITextField alloc] initWithFrame:CGRectMake(0, 40000, 320, 20)]; 
    dummyView.delegate = self; 
    [self.view addSubview:dummyView]; 
} 

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 
{ 
    if(textField == field && textField.superview == self.view) { 
     [field removeFromSuperview]; 
     dummyView.inputAccessoryView = field; 

     [dummyView becomeFirstResponder]; 
    } 
    return YES; 
} 

@end 

我要補充,因爲iOS 4的我用船運應用這種技術。

編輯:那麼幾個其他的想法:

1)爲了使故障時,鍵盤開始移動看起來好一點,你可以把你的TextView的快照,並將它放入一個UIImageView,當您從主視圖中刪除textView,將其替換爲UIImageView。現在外觀是一樣的。爲圖像添加一個動畫,以便注意發生了50毫秒,然後alpha變爲0.爲您的真實textview添加一個類似的動畫,以便在50 ms內具有0的alpha值,然後它將變爲1。能夠調整這個過渡是好的(但不是很好)。

2)蘋果可能會這樣做的方式是從鍵盤移動通知中獲取動畫曲線和時間。在這種情況下,他們會首先添加0高度的輔助視圖,併爲textField添加動畫,以便跟蹤鍵盤,但在其上方。兩者同時移動相同的距離。在動畫結束時,將textField拉出self.view,將附件視圖的框改爲具有textField的高度,並將textField作爲附件容器視圖的子視圖放置。這應該工作,但是,它有點複雜。如果你想讓某人爲你的代碼提供100點的獎勵。在結束時,您仍然需要虛擬文本字段來移動textField,因爲當您將其從包含視圖中取出時,它將會退出第一個響應者。最後,您將虛擬場作爲第一響應者,移動文本字段,然後再將真實文本字段作爲第一響應者。

+0

謝謝大衛。我會盡可能地嘗試並更新。令人遺憾的是,蘋果公司並沒有提供更好的方式來做到這一點。 – Ricky

+0

我個人的觀點是,它不是那麼多的代碼,它使用了OSX上經常使用的校長,坦率地說,我還有其他一些缺陷和功能需要他們去處理。我有一個複雜的集合視圖,我不能逐步更新(它崩潰),所以任何更改都必須重新加載它! –

+0

我設法得到這主要與我的UITextViews,但我注意到,UIKeyboard動畫與從屏幕底部inputAccessoryView。所以在很短的時間內,你可以看到另一種觀點。你之前有沒有注意到這個? – Ricky

7

一個更容易的解決辦法是讓你的輸入字段中輸入您的視圖控制器的輸入附件視圖:

- (BOOL)canBecomeFirstResponder 
{ 
    return YES; 
} 

- (UIView *)inputAccessoryView 
{ 
    return self.yourInputField; 
} 

畫面將會在屏幕上,在屏幕的底部,當它成爲第一個響應響應用戶點擊它,鍵盤將呈現。該視圖將以動畫方式顯示,並保留在鍵盤上方。

相關問題