2012-08-05 47 views
0
- (void) actionsheetstart 
{ 
    actionSheet=[[UIActionSheet alloc] initWithTitle:@"" delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil]; 
    [actionSheet showInView:self.view]; 
    UIToolbar *pickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 480, 32)]; 
    [pickerToolbar sizeToFit]; 
    pickerToolbar.barStyle = UIBarStyleBlackTranslucent; 
    NSMutableArray *barItems = [[NSMutableArray alloc] init]; 

    UIBarButtonItem *cancelBtn = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonSystemItemCancel target:self action:@selector(cancel_clicked:)]; 
    [barItems addObject:cancelBtn]; 
    UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 
    [barItems addObject:flexSpace]; 
    UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(done_clicked:)]; 
    [barItems addObject:doneBtn]; 
    [pickerToolbar setItems:barItems animated:YES]; 
    [actionSheet addSubview:pickerToolbar]; 

    UIPickerView *picker = [[UIPickerView alloc] init]; 
    picker.frame = CGRectMake(0, 44, 320, 216); 
    picker.delegate = self; 
    picker.dataSource = self; 
    picker.showsSelectionIndicator = YES; 
    [actionSheet addSubview:picker]; 
} 

-(void)done_clicked:(id)sender 
{ 
    [actionSheet dismissWithClickedButtonIndex:0 animated:YES]; 
} 
-(void)cancel_clicked:(id)sender 
{ 
    [actionSheet dismissWithClickedButtonIndex:0 animated:YES]; 
} 

由于某种原因,操作表很好,但UIPickerView和UIToolBar疯了。 我尝试将帧设置为-px,但没有任何成功。什么似乎是问题?在ActionSheet上的UIPickerView的奇怪行为

非常感谢。

dismissing pickerview

回答

3

不要插入UIPickerView里面UIActionSheet,你不会得到正确的行为这种方式。我的解决办法:

  1. 子类UIButton,实现方法canBecomeFirstResponder:,返回YES
  2. 在您的子类别UIButton中执行inputView方法,返回UIPickerView
  3. (可选)在子类按钮中实施inputAccessoryView方法,以将工具栏返回到拾取器上方。
  4. 点击时制作按钮becomeFirstResponder:

瞧,你有选择器模式显示,当按钮被点击时,就像一个键盘。

编辑:

MyButton.h

#import <UIKit/UIKit.h> 

@interface MyButton : UIButton 

@end 

MyButton.m

#import "MyButton.h" 

@implementation MyButton { 
    UIDatePicker *_pv; 
} 

- (BOOL)canBecomeFirstResponder { 
    return YES; 
} 

#pragma mark - Picker 

- (UIView *)inputView { 
    // set up your UIPickerView here 
    _pv = [[UIDatePicker alloc] init]; 
    [_pv setDatePickerMode:UIDatePickerModeTime]; 
    [_pv setMinuteInterval:30]; 
    return _pv; 
} 

- (UIView *)inputAccessoryView { 
    // set up your toolbar here 
    UIToolbar *tb = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; 
    UIBarButtonItem *flex = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 
    UIBarButtonItem *ok = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(pick:)]; 
    [tb setItems:[NSArray arrayWithObjects:flex, ok, nil]]; 
    return tb; 
} 

- (void)pick:(id)sender { 
    // store picker value here before closing inputView 
    [self resignFirstResponder]; 
} 
@end 
+0

我是新来的OBJ-C和我真的没有任何线索如何做到这一点。 :(但无论如何感谢。 – 2012-08-06 07:33:58

+0

对不起,我让你久等了。请参阅我上面的编辑样例实施。 – 2012-08-06 08:08:19