2012-04-17 66 views
0

我有一個自定義的UIPickerView嵌入到一個UIActionsheet中,當調用時它會出現在屏幕的一半。很棒。問題在於我想讓barrelPicker在第一次出現時顯示「最可能」結果作爲選擇(在所有數據加載到它之後)。
在將自定義選取器嵌入到動作表中之前,我在UIViewController中創建了它,並且在ViewController的viewDidLoad方法中調用了「showProbableResults」(我的一個自定義方法),因爲我知道在那個時候, UIPickerView將被加載並準備就緒。現在有沒有相當的地方讓我調用這個方法,還是需要重新考慮我的整個設計?實質上,我需要的是在UIPickerView加載完成後調用它的地方。UIPickerController - 想要在加載時顯示特定的選擇

- (void)startWithDelegate:(UIViewController <ImageProcessingDelegate> *)sender 

{ 
self.delegate = sender; 
self.showFirstBottle = YES; 
[self start]; 

}

- (void) start { 

self.actionSheet = [[UIActionSheet alloc] initWithTitle:@"Choose Something" 
                 delegate:self 
               cancelButtonTitle:nil 
              destructiveButtonTitle:nil 
               otherButtonTitles:nil]; 

[self.actionSheet setActionSheetStyle:UIActionSheetStyleBlackTranslucent]; 

CGRect pickerFrame = CGRectMake(0, 40, 0, 0); 

NSLog(@"1.) About to alloc the picker"); 

self.vintagePicker = [[UIPickerView alloc] initWithFrame:pickerFrame]; 
self.vintagePicker.showsSelectionIndicator = YES; 
self.vintagePicker.dataSource = self; 
self.vintagePicker.delegate = self; 

[self.actionSheet addSubview:self.vintagePicker]; 
[self.vintagePicker release]; 

UISegmentedControl *nextButton = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObject:@"Next"]]; 
nextButton.momentary = YES; 
nextButton.frame = CGRectMake(260, 7.0f, 50.0f, 30.0f); 
nextButton.segmentedControlStyle = UISegmentedControlStyleBar; 
nextButton.tintColor = [UIColor blackColor]; 
[nextButton addTarget:self action:@selector(show:) forControlEvents:UIControlEventValueChanged]; 
[self.actionSheet addSubview:nextButton]; 
[nextButton release]; 

UISegmentedControl *backButton = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObject:@"Back"]]; 
backButton.momentary = YES; 
backButton.frame = CGRectMake(10, 7.0f, 50.0f, 30.0f); 
backButton.segmentedControlStyle = UISegmentedControlStyleBar; 
backButton.tintColor = [UIColor blackColor]; 
[backButton addTarget:self action:@selector(cancel:) forControlEvents:UIControlEventValueChanged]; 
[self.actionSheet addSubview:backButton]; 
[backButton release]; 

[self.actionSheet showInView:_delegate.parentViewController.tabBarController.view]; // show from our table view (pops up in the middle of the table) 
[self.actionSheet setBounds:CGRectMake(0, 0, 320, 485)]; 

}

+0

您的行動表/選取器是一個自定義類嗎?請給我們一些代碼。 – AMayes 2012-04-17 14:42:39

+0

是的,我的動作表和選取器是NSObject的一個自定義類 - 上面的代碼是將它踢開的。 – 2012-04-17 15:05:07

回答

0

一個選擇是創建可重用選擇器視圖,如圖所示here,然後從任何視圖調用@optional

-(void)setInitialPickerValueToRow:(int)i inComponent:(int)j animated:(BOOL)k{ 
    [pickerView selectRow:i inComponent:j animated:k]; 
} 

控制器或NSObject(比如你的UIActionSheetDelegate)。

你的另一種選擇是設置一個標準的預先選擇的選項,如下所示:

self.vintagePicker = [[UIPickerView alloc] initWithFrame:pickerFrame]; 
self.vintagePicker.showsSelectionIndicator = YES; 
self.vintagePicker.dataSource = self; 
self.vintagePicker.delegate = self; 
[self.actionSheet addSubview:self.vintagePicker]; 
[self.vintagePicker selectRow:0 inComponent:0 animated:NO]; 

你也可以有你設置不同的變量,並有selectRow:inComponent:animated:訪問的,而不是被預設。

[self.vintagePicker selectRow:myRow inComponent:0 animated:NO]; 

希望這有助於!

+0

這是假設我甚至知道你在找什麼。你只是想設置初始選擇,還是你想知道在哪裏初始化pickerView? – AMayes 2012-04-17 15:48:47

+0

只需設置初始選擇!將嘗試你的建議,看看它是否有效,並儘快接受 - 非常感謝你! – 2012-04-17 16:01:37

+0

嘗試了選項#2,這不幸並不適合我。選擇器仍然設置其行和組件並引發異常。爲了更加明確,我有一個3組件選取器,它裝載了nsdisctionary中的變量,第2個組件中的值取決於第一個組件中的值,第三個值取決於第一個和第二個組件中的值...因此,我需要將整個桶拾取器加載並準備好,然後才能進行選擇。我想可能有一些簡單的「UIPicker完成加載」的方法,我可以堅持下去。 – 2012-04-17 16:12:58

相關問題