Jak mogę utworzyć duży, czerwony UIButton za pomocą iPhone SDK?

Używając iPhone SDK, jak mógłbym utworzyć czerwony przycisk "Usuń" podobny do tego używanego przy usuwaniu kontaktów na iPhonie?

Author: slhck, 2009-09-15

9 answers

Zaczynasz od rozciągliwego obrazu:

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

Następnie tworzysz przycisk z rozciągniętym obrazem jako tłem i stosujesz tekst.

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];

Oczywiście musisz dostosować pochodzenie i rozmiar ramki, aby pasowały do Twojej aplikacji, a także cel, Selektor i tytuł.

 85
Author: coneybeare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-19 17:39:26

Zrobiłem też kilka guzików...wersje siatkówki i nie siatkówki

Jeśli chcesz użyć ich w komórce, użyj następującego kodu w 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];

Zielony Przycisk Normalny

Czerwony Przycisk Normalny

Szary Przycisk Normalny

Siatkówka Z Zielonym GuzikiemRed Button RetinaSiatkówka Z Szarym Guzikiem

 62
Author: Staeff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-23 22:03:09

Myślę, że te są lepsze (i wyglądają dobrze na wyświetlaczu siatkówki też):

alt textalt text

.png wygenerowane z tego bardzo ładne .plik psd: http://www.teehanlax.com/blog/2010/08/12/iphone-4-gui-psd-retina-display/

A następnie użyj go jako strechowalnego obrazu na tle twojego UIButton: {[0]}

 22
Author: yonel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-09 12:29:48

Dodałem kilka zdjęć przycisków dostępnych bezpłatnie na licencji MIT na mojej stronie, które bardziej pasują do szklanych przycisków iOS. (ale to forum nie pozwala mi zamieszczać zdjęć b / c jestem Nowy)

Aby je pobrać i pobrać przykładowy kod, zobacz:

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

 7
Author: RicMoo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-10 08:56:50

Ostatnio też to robiłem i tworzyłem dla niego ten przycisk (i jakiś przykładowy kod Monotouch dla dowolnych monotoucherów):

Alt text http://www.yetanotherchris.me/storage/downloads/uiglassbutton-template.png

Ma mniej ukosu, który działa lepiej na każdym tle, ale nie pasuje do iPhone UIGlassButton dokładnie.

 5
Author: Chris S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-22 11:50:06

Aby ułatwić dowolny kolor stworzyłem własny rendering dla UIButton, który pozwala ustawić niestandardowy odcień.

Dla zainteresowanych, można go znaleźć na GitHubie pod adresem

Https://github.com/appsinyourpants/Pants-Framework/blob/master/Classes/Views/PFTintedButton.m

 4
Author: Paul Alexander,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-08 00:50:47

Prawdopodobnie najprostszym sposobem na to jest złapanie tego pliku graficznego Photoshop dla iPhone ' a , który zawiera wiele elementów interfejsu użytkownika w warstwach PSD, a następnie zmiana odcienia dużego przycisku w Photoshopie i zapisanie go jako PNG.

Zaletą robienia tego w ten sposób jest to, że można również tworzyć wersje dla zaznaczonego przycisku i/lub stanu podświetlenia oraz przypisywać obrazy do standardowego interfejsu użytkownika.

 2
Author: Ramin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-15 17:05:56

Możesz utworzyć oddzielną sekcję w widoku tabeli zgrupowanej, nadać tej sekcji tylko jeden wiersz i ustawić obraz tła komórki na czerwony gradient. Będziesz musiał odtworzyć ten obraz na własną rękę.

 0
Author: Tim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-15 15:17:41

Chciałbym zaproponować rozwiązanie, które nie używa obrazów, ale nadaje taki sam wygląd jak przycisk "Usuń" w kontaktach. W poniższym przykładzie użyję assume a UITableView z zgrupowanymi , statycznymi komórkami, zaprojektowanymi w storyboard. Spraw, aby jedna z sekcji miała tylko jedną komórkę. Ta komórka będzie przyciskiem "Usuń". W komórce znajduje się czerwony kolor tła (np. czerwony 221, Zielony 0, Niebieski 2)

Do komórki dodamy dwie gradienty. Pierwsza obejmie górna połowa komórki. Drugi obejmie dolną połowę.

Dodaj QuartzCore do pliku implementacji:

#import <QuartzCore/QuartzCore.h>

Zacznij od wyjścia do tej komórki:

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

Utwórz metodę, w której komórka będzie sformatowana:

- (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];
}

Powyższe spowoduje, że Twoja komórka będzie wyglądać jak przycisk "Usuń" w kontaktach. Ale chcemy również, aby zmienił kolor, gdy użytkownik go dotknie. Tak zrobi ostatni fragment kodu w powyższej metodzie. Ustawi inny widok z ciemniejszym kolorem JAKO selectedBackgroundView.

Po dotknięciu komórki pozostanie zaznaczona i zachowa ciemny kolor. Aby automatycznie usunąć zaznaczenie komórki wykonujemy następujące czynności:

Zacznij od stałej, która określa numer sekcji Twojej komórki delete:

static NSInteger const SECTION_DELETE = 1;

Zaimplementuj teraz metodę (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath (zdefiniowaną w 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];
     */

}
 0
Author: Brabbeldas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-28 08:09:44