2009-07-31 11 views
30

Uczę się, jak rozwijać się na iPhonie, kupiłem książkę o nazwie Początek rozwoju iPhone 3 Poznawanie SDK. Po tym jak podjąłem decyzję, porzuciłem Interface Builder. Nadal projektuję wszystkie moje widoki w IB, ale zapisuję Wszystko w kodzie i używam tylko pliku nib, aby uzyskać ramki kontrolek.iPhone Dev - Twórz UIBUTton ręcznie

Muszę teraz wykonać UIButton, a dokumentacja różni się od innych elementów sterujących. Próbowałem użyć initWithFrame: i tamto inne metody buttonWithType:, które jak sądzę, są autoreleased, ale i tak nie mogłem dostać przycisku, aby pojawić się na ekranie. Czy ktoś mógłby napisać trochę kodu, który lokalnie tworzy przycisk z tytułem, który mogę zmienić, że mogę potem dodać do podglądu moich widoków i wydać, abym mógł zobaczyć, jak to się robi?

Odpowiedz

83

chciałbym spróbować czegoś takiego:

UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    myButton.frame = CGRectMake(20, 20, 200, 44); // position in the parent view and set the size of the button 
    [myButton setTitle:@"Click Me!" forState:UIControlStateNormal]; 
    // add targets and actions 
    [myButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside]; 
    // add to a view 
    [superView addSubview:myButton]; 

Uwaga: tylko pisanie o tym tutaj. W tej chwili nie mam dostępu do komputera Mac, więc nie mogę go przetestować.

P.S. Czy nie ma jakiegoś szczególnego powodu, aby nie używać Kreatora interfejsu? Po prostu ciekawy.

+1

Zakładając, że istnieje selektor 'buttonClicked:', jest to całkowicie poprawny i dobry sposób na jego realizację. +1 – Tim

+7

Nie lubię IB, ponieważ jest jak wielka czarna skrzynka i nie widzę, co się dzieje, a to po prostu komplikuje rzeczy ... Jedyne, co moim zdaniem jest przydatne, to projektowanie interfejsu. Czy to myButton autoreleased? Czy to też zadziała, gdybym wykonał UIButton * myButton = [[przydzielenie UIButton] initWithFrame: ...]; .. ale jak ustawić typ przycisku tylko do odczytu .. – mk12

+0

I nie mogę zrobić myButton.titleLabel.text = @ "Kliknij mnie!" zamiast setTitle forState? – mk12