Ответ 1
Это, безусловно, возможно, и мне нравится делать это все время!
Сначала сделайте @property
UIActionSheet
(в этом примере моя называется aac
- это очень удобно, особенно если вы хотите называть ее UITextFields
.
Далее, в методе, который вы поднимаете таблицу действий, скажем,
-(IBAction)userPressedButton:(id)sender
, создайте локальный экземпляр листа действий.
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil
delegate:self
cancelButtonTitle:nil
destructiveButtonTitle:nil
otherButtonTitles:nil];
затем добавьте его в свою собственность: self.aac = actionsheet
Теперь у вас есть полное правление, чтобы что-либо сделать в этом ActionSheet, я дам вам сокращенную форму того, что я сделал для недавнего проекта:
- (IBAction)sendDataButtonPressed:(id)sender {
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil
delegate:self
cancelButtonTitle:nil
destructiveButtonTitle:nil
otherButtonTitles:nil];
self.aac = actionSheet;
UIImageView *background = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"actionsheet_bg.png"]];
[background setFrame:CGRectMake(0, 0, 320, 320)];
background.contentMode = UIViewContentModeScaleToFill;
[self.aac addSubview:background];
UIButton *cancelButton = [UIButton buttonWithType: UIButtonTypeCustom];
cancelButton.frame = CGRectMake(0, 260, 320, 50);
[cancelButton setBackgroundImage:[UIImage imageNamed:@"actionsheet_button.png"] forState: UIControlStateNormal];
[cancelButton addTarget:self action:@selector(cancelButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
cancelButton.adjustsImageWhenHighlighted = YES;
[cancelButton setTitle:@"Cancel" forState:UIControlStateNormal];
[cancelButton setTitleColor:[UIColor colorWithRed:0/255.0f green:177/255.0f blue:148/255.0f alpha:1.0f] forState:UIControlStateNormal];
cancelButton.titleLabel.textAlignment = NSTextAlignmentCenter;
cancelButton.titleLabel.font = [UIFont fontWithName: @"SourceSansPro-Light" size: 25];
[self.aac addSubview: cancelButton];
UIButton *emailResultsButton = [UIButton buttonWithType: UIButtonTypeCustom];
emailResultsButton.frame = CGRectMake(25, 12, 232, 25);
[emailResultsButton addTarget:self action:@selector(emailResultsTapped:) forControlEvents:UIControlEventTouchUpInside];
emailResultsButton.adjustsImageWhenHighlighted = YES;
[emailResultsButton setTitle:@"Email Results" forState:UIControlStateNormal];
[emailResultsButton setTitleColor:[UIColor colorWithRed:255/255.0f green:255/255.0f blue:255/255.0f alpha:1.0f] forState:UIControlStateNormal];
[emailResultsButton setTitleColor:[UIColor colorWithRed:0/255.0f green:177/255.0f blue:148/255.0f alpha:1.0f] forState:UIControlStateHighlighted];
emailResultsButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
emailResultsButton.titleLabel.font = [UIFont fontWithName: @"SourceSansPro-Light" size: 20];
[self.aac addSubview: emailResultsButton];
// lots of other buttons...
// then right at the end you call the showInView method of your actionsheet, and set its counds based at how tall you need the actionsheet to be, as follows:
[self.aac showInView:self.view];
[self.aac setBounds:CGRectMake(0,0,320, 600)];
Вот изображение того, что происходит (помните, что в примере кода я пропустил все остальные кнопки, но они изображены здесь):
Теперь, если вы хотите отменить actionSheet - в зависимости от того, как вы настроили структуру своей кнопки, или, возможно, используете UIToolBar (очень часто) - вы можете в действии селектора кнопок сделать следующее:
-(void)cancelButtonClicked:(id)sender {
[self.aac dismissWithClickedButtonIndex:0 animated:YES];
}
Кроме того, просто FYI, получив все размеры, подходящие только для вашего макета, потребуется немного времени, так как вы не работаете с видом вашего основного UIView вашего UIViewController, а скорее из вида actionSheet, поэтому он имеет разные размеры.
Один трюк, который я делаю, - это раскладка листа действий в Storyboard с UIView, а затем поместить все объекты, которые вы хотите в своем "рабочем листе" в этом UIView, и вы должны получить точные размеры для всех изображений.
Сообщите мне, если вам нужно разъяснение, удачи!