Если вы просто хотите имитировать UIActionSheet, я бы просто создать подкласс UIVew под названием что-то вроде " CoolActionSheet "и программно поместите туда кнопки. Затем, когда вы нажимаете кнопки, он вызывает метод делегата в протоколе, который будет реализован в вашем главном контроллере представления, поэтому сделайте что-нибудь.
Чтобы показать и скрыть сборщик действия использовать UIView анимацию в классе CoolActionSheet так:
-(void)showSheet {
NSLog(@"Showing sheet...");
//Set the x/y position of the action sheet to JUST off-screen
CGFloat xPos = parentView.frame.origin.x;
CGFloat yPos = parentView.frame.size.height+kActionSheetHeight;
[self setFrame:CGRectMake(xPos, yPos, kActionSheetWidth, kActionSheetHeight)];
/*Here is where you would add your other UI objects such as buttons
and set their @selector to a method in your CoolActionSheet protocol. You could then implement this delegate method in
your main view controller to carry out a custom action. You might also want to add a background image to the view or something else.
For example: */
UIButton *coolButton = [[UIButton alloc] initWithFrame:buttonDimensions];
[coolButton addTarget:self action:@selector(didDismissActionSheet) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:coolButton];
[self.parentView addSubview:self.view];
//Slide the sheet up from the bottom of the screen
[UIView animateWithDuration:0.2 animations:^(void) {
//Slide banner in from left to right
[self setFrame:CGRectMake(0, yPos-kActionSheetHeight, kActionSheetWidth, kActionSheetHeight)];
}];
}
И скрыть:
-(void)hideSheet {
NSLog(@"Hiding");
CGFloat xPos = parentView.frame.origin.x;
CGFloat yPos = parentView.frame.size.height+kActionSheetHeight;
[UIView animateWithDuration:0.2 animations:^(void) {
[self setFrame:CGRectMake(xPos, yPos, 320, 65)];
}completion:^(BOOL finished) {
[self removeFromSuperview]; //Clean up
}];
}
Вы также можете серое-вне родительский вид. Опять же, в CoolActionSheet.m:
-(void)shadeParentView {
UIView *shadedView = [[UIView alloc] initWithFrame:CGRectMake(, 0, 320, 480)];
[shadedView addGestureRecognizer:gestureRecognizer];
[shadedView setBackgroundColor:[UIColor blackColor]];
[shadedView setAlpha:0.0];
[self addSubview:shadedView];
[UIView animateWithDuration:0.5 animations:^{
[shadedView setAlpha:0.5];
}];
}
Вы должны были бы установить parentView с точки зрения контроллера представления. Таким образом, чтобы вызвать лист действий в главном контроллере представления Вы:
CoolActionSheet *coolSheet = [[CoolActionSheet alloc] init];
[coolSheet setParentView:self.view];
[coolSheet setSheetDelegate:self]; //set the delegate to implement button press methods in this view controller
Это может показаться немного многословно, но это хороший шаблон MVC, чтобы отделить его в другой класс представления, как это. И теперь у вас есть пользовательский класс, который вы можете просто импортировать в любой другой проект, и он будет работать!
У меня не было возможности проверить этот конкретный код, но весь подход хорош. Очки, чтобы забрать из этого:
- Использование пользовательских UIView класса
- Реализовать методы делегата для выполнения задач в главном контроллере представления при нажатии кнопки в вашем подвид.
- Реализуйте хорошую структуру MVC, чтобы избежать кода спагетти.
Позвольте мне знать, если это помогает :)
набор действий для этого кнопки, то вы можете делать все, что вы хотите, в том, что методы действий – Narayana
я думаю, что это не возможно, потому что я уже пробовал, тот же вопрос пришел, тогда я положил навигационную панель с двумя кнопками и PickerView в листе действий.Если вы хотите представить полный просмотр, то мое предложение - использовать presentModelViewController. –
Я просто хотел подражать анимации таблицы UIActionSheet, чтобы вызвать небольшой диалог внизу. Мне действительно не хотелось показывать полный размер. Есть ли способ сделать это? –