Подтвердить что ты не робот

Как я могу создать большой красный UIButton с iOS?

Используя iOS, как мне создать красную кнопку "удалить", аналогичную той, которая использовалась при удалении контактов на iPhone?

4b9b3361

Ответ 1

Сначала вы начинаете с растягиваемого изображения:

alt text http://grab.by/4lP

Затем вы создаете кнопку с растянутым изображением в качестве фона и применяете текст.

UIButton *sampleButton = [UIButton buttonWithType:UIButtonTypeCustom];
[sampleButton setFrame:CGRectMake(kLeftMargin, 10, self.view.bounds.size.width - kLeftMargin - kRightMargin, 52)];
[sampleButton setTitle:@"Button Title" forState:UIControlStateNormal];
[sampleButton setFont:[UIFont boldSystemFontOfSize:20]];
[sampleButton setBackgroundImage:[[UIImage imageNamed:@"redButton.png"] stretchableImageWithLeftCapWidth:10.0 topCapHeight:0.0] forState:UIControlStateNormal];
[sampleButton addTarget:self action:@selector(buttonPressed) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:sampleButton];

Очевидно, вам нужно будет отрегулировать начало и размер кадра в соответствии с вашим приложением, а также цель, селектор и заголовок.

Ответ 2

Я также сделал несколько кнопок... версии сетчатки и не-сетчатки

Если вы хотите использовать их в ячейке, просто используйте следующий код в cellForRowAtIndexPath:

UIButton *sampleButton = [UIButton buttonWithType:UIButtonTypeCustom];
[sampleButton setFrame:[cell.contentView frame]];
[sampleButton setFrame:CGRectMake(0, 0, cell.bounds.size.width-20, 44)];
[sampleButton setBackgroundImage:[UIImage imageNamed:@"button_red.png"] forState:UIControlStateNormal];
[cell addSubview:sampleButton];

Green Button Normal

Red Button Normal

Grey Button Normal

Green Button RetinaRed Button RetinaGrey Button Retina

Ответ 3

Я думаю, что эти лучше (и они отлично смотрятся на дисплее сетчатки):

alt textalt text

.png, сгенерированный из этого очень приятного .psd файла: http://www.teehanlax.com/blog/2010/08/12/iphone-4-gui-psd-retina-display/

И затем используйте его как растяжимое изображение для фона вашего UIButton:


UIImage * greenButton = [UIImage imageNamed: @ "UIButton_green.png" ];
UIImage * newImage = [greenButton stretchableImageWithLeftCapWidth: greenButton.size.width/2 topCapHeight: greenButton.size.height/2];
[callButton setBackgroundImage: newImage forState: UIControlStateNormal];

Ответ 4

Я добавил некоторые изображения кнопок, доступные свободно под лицензией MIT, на мой сайт, которые более точно соответствуют кнопкам стекла iOS. (но этот форум не позволит мне отправлять изображения b/c, я новичок)

Чтобы загрузить их и пример кода, см.:

http://www.geneticmistakes.com/articles/1000/stretchable-dynamic-images-for-buttons

Ответ 7

Возможно, самый простой способ сделать это: этот файл графического интерфейса пользователя iPhone, содержащий множество элементов пользовательского интерфейса в PSD-слоях, затем измените оттенок большой кнопки в Photoshop и сохранить его как PNG.

Одно из преимуществ этого способа состоит в том, что вы также можете создавать версии для выбранной кнопки и/или выделять состояние и назначать изображения стандартным UIButton.

Ответ 8

Вы можете создать отдельный раздел в сводном представлении таблицы, дать этому разделу только одну строку и установить фоновое изображение ячейки на изображение с красным градиентом. Однако вам придется воссоздать это изображение самостоятельно.

Ответ 9

Я хотел бы внести решение, которое не использует изображения, но которое дает такой же вид, как кнопка "удалить" в "Контакты". В приведенном ниже примере я буду использовать UITableView с сгруппированными, статическими ячейками, разработанными в раскадровке. Сделайте один из разделов только одной ячейкой. Эта ячейка будет кнопкой "удалить". Дайте ячейке красный цвет фона (например, красный 221, зеленый 0, синий 2)

Что мы сделаем, так это добавить в ячейку два GradientLayers. Первый будет охватывать верхнюю половину ячейки. Второй будет охватывать нижнюю половину.

Добавьте QuartzCore в ваш файл реализации:

#import <QuartzCore/QuartzCore.h>

Начните с создания выхода в эту ячейку:

@property (strong, nonatomic) IBOutlet UITableViewCell *cellDelete;

Создайте метод, в котором ячейка будет отформатирована:

- (void)formatCellDelete
{
    // Top Gradient //
    CAGradientLayer *gradientTop = [CAGradientLayer layer];

    // Make a frame for the layer based on the size of the cells contentView
    // Make it half the height
    // The width will be -20 so the gradient will not overflow
    CGRect frame = CGRectMake(0, 0, _cellDelete.contentView.frame.size.width - 20, _cellDelete.contentView.frame.size.height / 2);
    gradientTop.frame = frame;

    gradientTop.cornerRadius = 8;

    UIColor* topColor = [UIColor colorWithWhite:1.0f alpha:0.75f];
    UIColor* bottomColor = [UIColor colorWithWhite:1.0f alpha:0.0f];
    gradientTop.colors = [NSArray arrayWithObjects:(id)[topColor CGColor], (id)[bottomColor CGColor], nil];

    [_cellDelete.contentView.layer setMasksToBounds:YES];
    [_cellDelete.contentView.layer insertSublayer:gradientTop atIndex:0];



    // Bottom Gradient //
    CAGradientLayer *gradientBottom = [CAGradientLayer layer];

    // Make a frame for the layer based on the size of the cells contentView
    // Make it half the height
    // The width will be -20 so the gradient will not overflow
    frame = CGRectMake(0, 0, _cellDelete.contentView.frame.size.width - 20, _cellDelete.contentView.frame.size.height / 2);
    // And move to bottom
    frame.origin.y = frame.size.height;
    gradientBottom.frame = frame;

    topColor = [UIColor colorWithWhite:0.0f alpha:0.05f]; //0.20
    bottomColor = [UIColor colorWithWhite:0.0f alpha:0.0f];
    gradientBottom.colors = [NSArray arrayWithObjects:(id)[topColor CGColor], (id)[bottomColor CGColor], nil];

    [_cellDelete.contentView.layer setMasksToBounds:YES];
    [_cellDelete.contentView.layer insertSublayer:gradientBottom atIndex:0];


    // Define a selected-backgroundColor so the cell changes color when the user tabs it
    UIView *bgColorView = [[UIView alloc] init];
    [bgColorView setBackgroundColor:[UIColor colorWithRed:(float)(0.502) green:0.0 blue:0.0 alpha:1.000]];
    bgColorView.layer.cornerRadius = 10;
    [_cellDelete setSelectedBackgroundView:bgColorView];
}

Вышеприведённое изображение придаст вашей ячейке стеклянную кнопку "Удалить" в "Контакты". Но мы также хотим, чтобы он менял цвет, когда пользователь удаляет его. Это то, что сделает последний фрагмент кода в указанном выше методе. Он будет устанавливать другое представление с более темным цветом в качестве выбранногоBackgroundView.

После нажатия ячейки останется выбранным и сохранит свой темный цвет. Чтобы автоматически отменить выбор ячейки, мы делаем следующее:

Начните с константы, которая определяет секцию nr вашей ячейки delete:

static NSInteger const SECTION_DELETE = 1;

Теперь реализуем метод (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath (определенный в UITableViewDelegate):

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    if(indexPath.section == SECTION_DELETE){

        [tableView deselectRowAtIndexPath:indexPath animated:YES];
    }


    // Navigation logic may go here. Create and push another view controller.
    /*
      *detailViewController = [[ alloc] initWithNibName:@"" bundle:nil];
     // ...
     // Pass the selected object to the new view controller.
     [self.navigationController pushViewController:detailViewController animated:YES];
     */

}