2013-02-27 149 views
0

我的iOS應用程序有一個包含十幾個字段的窗體,我想在鍵盤上添加「Previous」/「Next」按鈕以幫助用戶在字段之間移動。我有這樣的事情:UISegmentedControl按鈕停止工作

for (UITextField *t in _textfields) { 
    t.delegate = self; 

    UIToolbar *toolbar = [[UIToolbar alloc] init]; 
    [toolbar setBarStyle:UIBarStyleBlackTranslucent]; 

    UISegmentedControl *segControl = [[UISegmentedControl alloc] initWithItems:@[@"Previous", @"Next"]]; 
    [segControl addTarget:self action:@selector(switchTextField:) forControlEvents:UIControlEventValueChanged]; 
    segControl.segmentedControlStyle = UISegmentedControlStyleBar; 
    segControl.tag = [_textfields indexOfObject:t]; 
    if (segControl.tag == 0) [segControl setEnabled:NO forSegmentAtIndex:0]; 
    else if (segControl.tag == [_textfields count] - 1) [segControl setEnabled:NO forSegmentAtIndex:1]; 

    [segControl sizeToFit]; 

    UIBarButtonItem *segItem = [[UIBarButtonItem alloc] initWithCustomView:segControl]; 

    UIBarButtonItem *flexButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil]; 
    UIBarButtonItem *doneButton =[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self.view action:@selector(endEditing:)]; 
    [toolbar setItems:@[segItem, flexButton, doneButton]]; 
    [toolbar sizeToFit]; 
    [t setInputAccessoryView:toolbar]; 
} 

我遇到的問題是,每隔一段時間段的一個停止工作。方法switchTextField只是不被調用,該按鈕看起來正常,沒有禁用,但觸摸不註冊。有時它是「上一個」按鈕,有時它是「下一個」按鈕,從不同時出現,有時它們都可以正常工作。一旦其中一個按鈕卡住了,暫時修復它的唯一方法是在不使用工具欄的情況下點擊另一個文本框,或者關閉鍵盤並再次開始編輯。可能是什麼問題呢?

回答

1

當您確實需要UIButton用於您的上一個/下一個控件時,分段控件不是一個好選擇。

我認爲正在發生的事情是,您正在使用分段控件初始化工具欄,並且沒有選擇任何段。因此,當您第一次點擊上一頁/下一頁時,值會更改,併爲該特定分段控件選擇該段。當您繼續點擊上一個/下一個時,最終您會看到一個已經選定片段的分段控件,並且該片段在點擊時不會觸發值更改事件,因爲它已經是選定的片段。

可以明確地取消選片段在switchTextField:方法(確保你不會觸發switchTextField:遞歸),或者你可以改變你的方案中使用UIButton對象進行上一頁/下一頁,而不是分段控制。

我推薦使用UIButton

+0

感謝您的提示重置選定的細分,這正是它是什麼。使用分段控制而不是按鈕的原因僅僅是表面化:我更喜歡當這些「prev/next」按鈕在單個控件中像段一樣連接,而不是在它們之間有空格的不同按鈕。 – SaltyNuts 2013-02-27 19:28:53

+0

雖然它有點更多的工作,但您可以使用自己的背景圖像自定義'UIButton',看起來像連接的按鈕。我通常會盡量避免使用控件的實現方式(例如,使用選擇控件作爲按鈕),但如果它看起來/按照您喜歡的方式運行,那就太棒了。 – XJones 2013-02-27 19:58:51