Как настроить кнопки в UIActionSheet? - PullRequest
6 голосов
/ 04 июля 2011

Я хочу изменить image of buttons из UIActionSheet, у меня есть images для каждого button, и я хочу, чтобы каждый button показал image, который я хочу.Я искал в Интернете, я нашел много ответов, но они не работали.

Вот инициализация UIActionSheet

-(IBAction)showActionSheet:(id)sender {

    UIActionSheet *popupQuery = [[UIActionSheet alloc] initWithTitle:@"title" delegate:self cancelButtonTitle:@"Cancel Button" destructiveButtonTitle:nil otherButtonTitles:@"Other Button 1", @"Other Button 2", nil];
    popupQuery.actionSheetStyle = UIActionSheetStyleDefault;
    [popupQuery showInView:self.view];
    [popupQuery release];

}

Ответы [ 3 ]

3 голосов
/ 25 марта 2012

Я создаю подкласс CustomActionSheet, производный от UIActionSheet, и реализую метод под названием customizeGUI.

Я использую CustomActionSheet, как UIActionSheet, за исключением того, что я должен вызвать метод customizeGUI подкласса в делегате willPresentActionSheet:

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet {
    if ([actionSheet isKindOfClass:[CustomActionSheet class]]) {
        CustomActionSheet *sheet = (CustomActionSheet*)actionSheet;
        [sheet customizeGUI];
    }
}


(CustomActionSheet.m)

- (void)customizeGUI {
    UIImageView *imgvwBackground = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bg_actionsheet.png"]];
    CGRect rect = self.bounds;
    imgvwBackground.frame = rect;
    [self insertSubview:imgvwBackground atIndex:0];
    [imgvwBackground release];

    int buttonIndex = 0;
    UIImage *imgButtonDestructive = [UIImage imageNamed:@"btn_actionsheet_destructive.png"];
    UIImage *imgButtonCancel = [UIImage imageNamed:@"btn_actionsheet_cancel.png"];
    UIImage *imgButtonNormal = [UIImage imageNamed:@"btn_actionsheet_normal.png"];
    for (UIView *sub in self.subviews) {
        NSString *className = [NSString stringWithFormat:@"%@", [sub class]];
        if ( ([className isEqualToString:@"UIThreePartButton"]) //iOS 4
            || ([className isEqualToString:@"UIAlertButton"]) ) { //iOS 5
            rect = sub.frame;
            sub.hidden = YES;

            UIButton *btn = [[UIButton alloc] initWithFrame:rect];
            UIImage *imgForButton = nil;
            if (buttonIndex == self.cancelButtonIndex) {
                imgForButton = imgButtonCancel;
            }
            else if (buttonIndex == self.destructiveButtonIndex) {
                imgForButton = imgButtonDestructive;
            }
            else {
                imgForButton = imgButtonNormal;
            }
            NSString *sTitle = [self buttonTitleAtIndex:buttonIndex];
            btn.titleLabel.font = [UIFont boldSystemFontOfSize:19];
            [btn setBackgroundImage:imgForButton forState:UIControlStateNormal];
            [btn setTitle:sTitle forState:UIControlStateNormal];
            btn.tag = buttonIndex;
            [btn addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];

            [self addSubview:btn];
            [btn release];

            buttonIndex++;
        }
    }
}

- (void)buttonClicked:(id)sender {
    UIButton *btn = sender;
    if ([self.delegate respondsToSelector:@selector(actionSheet:clickedButtonAtIndex:)]) {
        [self.delegate actionSheet:self clickedButtonAtIndex:btn.tag];
    }
    [self dismissWithClickedButtonIndex:btn.tag animated:YES];
}

Надеюсь, что этот способ поможет вам и даст вам идею настроить UIActionSheet

1 голос
/ 04 июля 2011

Если вы измените эти размеры, то вы не только сделаете ваше приложение менее пригодным для использования, но это может нарушить рекомендации Apple по интерфейсу пользователя, что приведет к отклонению вашего приложения при подаче.пример использования UiActionsheet от Apple

0 голосов
/ 04 июля 2011

Похоже, вам просто нужно создать свой собственный класс.Я хотел бы изучить подклассы UIView или UIActionSheet.Вокруг этого PSD есть все, что вам нужно, в зависимости от авторских прав.

РЕДАКТИРОВАТЬ: Если вы в конечном итоге создаете свой собственный класс, и это хорошо, попробуйте загрузить его в http://cocoacontrols.com/

...