2013年5月27日 星期一

跳出UIPickerView來做選擇(有限資料)的做法



雖然覺得這樣的使用有點麻煩(太囉唆),但是還是記錄一下。



.h內的interface中加入UIPickerViewDelegate,UIActionSheetDelegate,UIPickerViewDataSource並且所使用的視圖元件要連接Outlets-Delegate要連接到File's Owners,否則無法抓到回傳的event。 
部分程式碼如下:

1.建立一個button並將Outlets-Delegate要連接到File's Owners
2.建立一個function內容如下,用button來觸發    
    //建立動作表
    UIActionSheet *SpeakSheet=[[UIActionSheet alloc]initWithTitle:@"\n\n\n\n\n\n\n\n\n\n\n\n\n" delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:@"set Sepaker", nil];
    //顯示動作表
    [SpeakSheet showInView:self.view];
    
    //建立挑選器視圖
    UIPickerView *SpeakPickerView = [[UIPickerView alloc]init];
    SpeakPickerView.tag=101;
    SpeakPickerView.delegate=self;
    SpeakPickerView.dataSource=self;
    SpeakPickerView.showsSelectionIndicator=YES;
    [SpeakSheet addSubview:SpeakPickerView];
3.如果有連接到File's Owner's就會被觸發,就可以在接到資訊
#pragma mark -
#pragma mark - SpeakPickerView methods
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    if (pickerView.tag==101){
        return 1;
    }
    return 1;//N個轉軸
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    if (pickerView.tag==101){
        return SpeakName.count;
    }
    return 1;//每個轉軸N個選項
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    NSLog(@"component:%i  row:%i",component,row);
    if (pickerView.tag==101){
        return [SpeakName objectAtIndex:row];
    }
    return @"error";
}
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
    NSLog(@"clickedButtonAtIndex %i",buttonIndex);//回傳資料的地方
    //這裡沒寫完,要判斷要切換到誰,不過不重要,因為要換方法,所以就不再寫
    
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    //當選定的時候從這邊抓取值,當按下click之後即可,讀取最正確地值作處理
    NSLog(@"didSelectRow");
}