0

不幸的是,iOS沒有像標籤一樣的html下拉選擇器。我決定終於爲我的應用程序創建一個,它看起來很棒,效果很好。我的下拉對象是UITextField的一個子類。然而,我改變了一些東西,現在只有一些時間。UITextField shouldBeginEditing每隔一段時間調用一次?

啓用了用戶交互,但我不希望文本框可以編輯。我的dropdown子類所在的類是UITextField委託,並且應該接收UITextField的委託方法。

我有- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{我檢查是否有問題的文本框是一個下拉菜單,如果是,我調用一個方法來實例化一個彈出窗口並禁用編輯,但下拉菜單隻出現在每一個其他的龍頭上。

例如,我將點擊「textfield」和我的popover顯示。我點出來讓popover消失,然後我點擊「textfield」,沒有任何反應。我再次點擊文本框並彈出窗口。不知道爲什麼發生這種情況,這裏是我在做什麼:

.H

subclass : UIViewController<UITextFieldDelegate> 

.M

dropdownTextField.delegate = self; 
... 
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{ 
    if(textField == self.measurementSelect){ 
     NSLog(@"IM CALLED"); 
     [self showPopover:textField]; 
     return NO; 
    } 
    return YES; 
} 

-(void)showPopover:(id)sender{ 
    if (_measurementPicker == nil) { 
     _measurementPicker = [[iPadMeasurementSelect alloc] initWithStyle:UITableViewStylePlain]; 
     _measurementPicker.delegate = self; 
    } 

    if (_measurementPopover == nil) { 
     _measurementPopover = [[UIPopoverController alloc] initWithContentViewController:_measurementPicker]; 
     [_measurementPopover presentPopoverFromRect:self.measurementSelect.frame inView:self.conversionView permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES]; 

    } 
    else { 
     [_measurementPopover dismissPopoverAnimated:YES]; 
     _measurementPopover = nil; 
    } 
} 

,每一個水龍頭被nslogged,所以我想我的酥料餅的方法是這個問題的罪魁禍首。有任何想法嗎?取笑UI元素分開存在和酥料餅的可見狀態

回答

2

我們重寫代碼:

// canonical lazy getters for UI elements 

- (iPadMeasurementSelect *)measurementPicker { 
    if (!_measurementPicker) { 
     _measurementPicker = [[iPadMeasurementSelect alloc] initWithStyle:UITableViewStylePlain]; 
     _measurementPicker.delegate = self; 
    } 
    return _measurementPicker; 
} 

- (UIPopoverController *)measurementPopover { 
    if (!_measurementPopover) { 
     _measurementPopover = [[UIPopoverController alloc] initWithContentViewController:self.measurementPicker]; 
    } 
    return _measurementPopover; 
} 

// now the show/hide method makes sense. it can take a bool about whether to show or hide 
-(void)showPopover:(BOOL)show { 

    if (show) { 
     [self.measurementPopover presentPopoverFromRect:self.measurementSelect.frame inView:self.conversionView permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES]; 
    } else { 
     [self.measurementPopover dismissPopoverAnimated:NO]; 
     // if you want/need to create a new one each time it is shown, nil the popover here, like this: 
     // self.measurementPopover = nil; 
    } 
} 

當文本框開始編輯,顯示出這樣的酥料餅:

[self showPopover:YES]; 

當代表得到didEndEditing消息:

[self showPopover:NO]; 
+0

工程就像一個魅力!偉大的見解! –

相關問題