2010-09-26 48 views

回答

2

使用CGAffineTransform 至少從我的觀察和測試的操作系統版本之前4.0的需求來定義的變換, 你的搜索欄移動到一個可見部分OS 4.0和更高版本的OS正在照顧鍵盤定位。這就是爲什麼我在這裏設置Transform之前檢查systemVersion的原因。

if ([[[UIDevice currentDevice] systemVersion] floatValue] < 4.0) { 
     CGAffineTransform translate = CGAffineTransformMakeTranslation(xx.0, yy.0);//use x,y values 
     [self setTransform:translate]; 
    } 
+0

謝謝但仍然留下其他問題。 – jarryd 2010-09-26 16:28:35

+0

還有什麼其他問題? – Emil 2010-09-26 17:50:18

+0

什麼問題......? – kthorat 2010-09-26 19:30:45

1

您不能設置鍵盤的位置,您只能詢問鍵盤的位置並適當地組織其他視圖。

// Somewhere you need to register for keyboard notifications 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    // Register for keyboard notifications 
    NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter]; 
    [defaultCenter addObserver:self selector:@selector(keyboardWasShown:) 
          name:UIKeyboardDidShowNotification object:nil]; 
    //... do something 
} 

// At some point you need to unregister for notifications 
- (void)viewWillHide { 
    NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter]; 
    [defaultCenter removeObserver:self]; 
} 

- (void)keyboardWasShown:(NSNotification*)aNotification 
{ 
    // Caution, this notification can be sent even when the keyboard is already visible 
    // You'll want to check for and handle that situation 
    NSDictionary* info = [aNotification userInfo]; 

    NSValue* aValue = [info objectForKey:UIKeyboardFrameEndUserInfoKey]; 

    CGSize keyboardSize = [aValue CGRectValue].size; 

    //... do something 
} 
+0

-1;您還需要取消註冊dealloc *和* viewDidUnload中的通知(否則當您第二次加載視圖時,您將註冊兩次)。 – 2010-09-26 16:22:57

+0

@tc。你是對的,但是出於錯誤的原因。通知中心不保留對觀察者的引用,所以如果您的課程被釋放,當通知中心嘗試向其發送通知時,您會崩潰。我將添加適當的代碼。 – kubi 2010-09-26 17:10:07

+0

我的理由完全是關於viewDidUnload。最後我檢查了一下,如果你註冊兩次,會得到雙重通知,如果有內存警告,這可能會導致奇怪的動畫。 – 2010-09-26 22:12:40

1

您不設置鍵盤的位置。系統會自動爲你做。

你需要做的是使用鍵盤的通知

+0

我有一個自定義搜索區域。不用擔心我會移動它。 – jarryd 2010-09-26 16:29:00

+0

'系統會在iOS 4中自動爲你做。 – Emil 2010-09-26 17:51:13

+0

我使用UITextField,抓取輸入並自己搜索任何匹配項。無論如何它解決了。 – jarryd 2010-09-27 23:10:14