Добавить UIPickerView в UIActionSheet из IOS 8 не работает
Я добавляю UIPickerView
в UIActionsheet
, но он отлично работает в ios 7
, но не работает в ios 8
. Пожалуйста, помогите мне решить это.
Здесь я прикреплен скриншот для этого. ![enter image description here]()
Спасибо
Я использую для этого следующий код.
UIActionSheet *actionSheet;
NSString *pickerType;
- (void)createActionSheet {
if (actionSheet == nil) {
// setup actionsheet to contain the UIPicker
actionSheet = [[UIActionSheet alloc] initWithTitle:@"Please select" delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil];
actionSheet.backgroundColor = [UIColor clearColor];
UIToolbar *pickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 40)];
pickerToolbar.barStyle = UIBarStyleBlackOpaque;
[pickerToolbar sizeToFit];
UIImageView *imageObj = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 320, 40)];
imageObj.image = [UIImage imageNamed:@"header.png"];
[pickerToolbar addSubview:imageObj];
UIButton *cancelBtn = [UIButton buttonWithType:UIButtonTypeCustom];
[cancelBtn addTarget:self action:@selector(pickerCancel:)forControlEvents:UIControlEventTouchDown];
// [cancelBtn setImage:[UIImage imageNamed:@"btnInviteCancel.png"] forState:UIControlStateNormal];
[cancelBtn setTitle:@"Cancel" forState:UIControlStateNormal];
cancelBtn.frame = CGRectMake(7.0, 7.0, 65.0, 25.0);
[pickerToolbar addSubview:cancelBtn];
UIButton *doneBtn = [UIButton buttonWithType:UIButtonTypeCustom];
[doneBtn addTarget:self action:@selector(pickerDone:)forControlEvents:UIControlEventTouchDown];
//[doneBtn setImage:[UIImage imageNamed:@"btnInviteDone.png"] forState:UIControlStateNormal];
[doneBtn setTitle:@"Done" forState:UIControlStateNormal];
doneBtn.frame = CGRectMake(258.0, 7.0, 55.0, 25.0);
[pickerToolbar addSubview:doneBtn];
[actionSheet addSubview:pickerToolbar];
[pickerToolbar release];
UIPickerView *chPicker = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 200.0)];
chPicker.dataSource = self;
chPicker.delegate = self;
chPicker.showsSelectionIndicator = YES;
[chPicker selectRow:0 inComponent:0 animated:YES];
[actionSheet addSubview:chPicker];
[chPicker release];
[actionSheet showInView:self.view];
[actionSheet setBounds:CGRectMake(0,0,320, 464)];
}
}
Ответы
Ответ 1
Это не работает, потому что Apple изменила внутреннюю реализацию UIActionSheet
. Пожалуйста, обратитесь к документации:
Замечания о подклассе
UIActionSheet не предназначен для подкласса, и следует добавить представления к своей иерархии. Если вам нужно представить лист с большей настройкой, чем предоставленный API UIActionSheet, вы можете создать свой собственный и представить его модально с помощью currentViewController: анимированный: завершение:.
Ответ 2
В Apple docs,
Важная: UIActionSheet
устарела в iOS 8. (Обратите внимание, что UIActionSheetDelegate
также устарел.) Чтобы создавать и управлять листами действий в iOS 8 и более поздних версиях, используйте UIAlertController
с a preferredStyle
of UIAlertControllerStyleActionSheet
.
Ссылка на документацию для UIAlertController
Например:
UIAlertController * searchActionSheet=[UIAlertController alertControllerWithTitle:@"" message:@"" preferredStyle:UIAlertControllerStyleActionSheet];
[ searchActionSheet.view setBounds:CGRectMake(7, 180, self.view.frame.size.width, 470)];
//yourView represent the view that contains UIPickerView and toolbar
[searchActionSheet.view addSubview:self.yourView];
[self presentViewController:searchActionSheet animated:YES completion:nil];
Ответ 3
Готовое решение готово с одинаковым поведением - ActionSheetPicker-3.0
Исходная версия используется UIActionsheet
, но с выпуском iOS 8 я обновляю этот проект и заменяю UIActionsheet простым представлением, но анимация и представление выглядят точно так же.
![animation]()
![ActionSheetPicker-3.0]()
Ответ 4
Я тоже нашел эту проблему, и у меня есть решение, надеюсь, это поможет вам.
Вы можете скачать образец кода здесь:
https://www.dropbox.com/s/yrzq3hg66pjwjwn/UIPickerViewForIos8.zip?dl=0
@interface ViewController : UIViewController <UIPickerViewDataSource, UIPickerViewDelegate>{
UIView *maskView;
UIPickerView *_providerPickerView;
UIToolbar *_providerToolbar;
}
- (void) createPickerView {
maskView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
[maskView setBackgroundColor:[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5]];
[self.view addSubview:maskView];
_providerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, self.view.bounds.size.height - 344, self.view.bounds.size.width, 44)];
UIBarButtonItem *done = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dismissActionSheet:)];
_providerToolbar.items = @[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], done];
_providerToolbar.barStyle = UIBarStyleBlackOpaque;
[self.view addSubview:_providerToolbar];
_providerPickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, self.view.bounds.size.height - 300, 0, 0)];
_providerPickerView.backgroundColor = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:0.5];
_providerPickerView.showsSelectionIndicator = YES;
_providerPickerView.dataSource = self;
_providerPickerView.delegate = self;
[self.view addSubview:_providerPickerView];
}
- (void)dismissActionSheet:(id)sender{
[maskView removeFromSuperview];
[_providerPickerView removeFromSuperview];
[_providerToolbar removeFromSuperview];
}
Ответ 5
Это ничего не показывает, потому что uiaewsheet и uiactionsheetdelegate устарели: ios8 https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIActionSheet_Class/index.html
Вам нужно использовать UIAlertController в ios 8.
Ответ 6
actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self
cancelButtonTitle:nil
destructiveButtonTitle:nil
otherButtonTitles:nil];
Ответ 7
Попробуйте это, представив таблицу UIActionSheet в последних двух строках:
[actionSheet showFromRect:CGRectMake(0,480, 320,215) inView:self.view animated:YES];
[actionSheet setBounds:CGRectMake(0,0,320, 464)];