Форум программистов, компьютерный форум CyberForum.ru

Objective-C

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.82
Adem
 Аватар для Adem
6 / 6 / 0
Регистрация: 17.04.2009
Сообщений: 34
#1

Наследование UIButton - Objective-C

10.07.2011, 16:16. Просмотров 2038. Ответов 7
Метки нет (Все метки)

Здраствуйте.

Подскажите, пожалуйста, почему, когда я пытаюсь создать кнопку класса CustomButton, наследованного от UIButton, то получается нечто такое:

Наследование UIButton

(Слева кнопка CustomButton, справа UIButton).

Вот интерфейс и реализация CustomButton:
Objective-C
1
2
3
4
5
6
7
@interface CustomButton : UIButton {
    SystemSoundID toneSSID;
}
 
-(SystemSoundID)gettoneSSID;
 
@end
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@implementation CustomButton
 
-(id)init
{
    NSString *toneFilename = [NSString stringWithFormat:@"%d", [self.titleLabel.text intValue]];
    NSURL *toneURLRef = [[NSBundle mainBundle] URLForResource:toneFilename withExtension:@"wav"];
    AudioServicesCreateSystemSoundID((CFURLRef)toneURLRef, &toneSSID);
    return [super init];
}
 
-(SystemSoundID)gettoneSSID
{
    return toneSSID;
}
В Interface Builder'е я создаю стандартную кнопку и меняю её тип на свой.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2011, 16:16     Наследование UIButton
Посмотрите здесь:

Наследование C++
C++ наследование С++
C++ Наследование
C++ наследование
UIButton bug?
C# Наследование интерфейса и наследование реализации
Xamarin Xamarin & UIButton
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Splitter
 Аватар для Splitter
201 / 143 / 5
Регистрация: 13.01.2009
Сообщений: 554
19.07.2011, 14:43     Наследование UIButton #2
А что именно Вам не нравится?

Добавлено через 29 минут
в догонку, попробовал у себя и понял ), сделайте вот так:

Objective-C
1
2
3
4
5
6
7
8
9
10
-(id)initWithCoder:(NSCoder *)aDecoder
{
    if (self = [super initWithCoder:aDecoder]){
        NSString *toneFilename = [NSString stringWithFormat:@"%d", [self.titleLabel.text intValue]];
        NSURL *toneURLRef = [[NSBundle mainBundle] URLForResource:toneFilename withExtension:@"wav"];
        AudioServicesCreateSystemSoundID((CFURLRef)toneURLRef, &toneSSID);
    }
 
    return self;
}
Adem
 Аватар для Adem
6 / 6 / 0
Регистрация: 17.04.2009
Сообщений: 34
19.07.2011, 17:32  [ТС]     Наследование UIButton #3
Не работает, даже когда я просто создаю пустой класс, наследованный от UIButton, и меняю на него класс кнопки в IB.
Splitter
 Аватар для Splitter
201 / 143 / 5
Регистрация: 13.01.2009
Сообщений: 554
19.07.2011, 19:14     Наследование UIButton #4
а что именно не работает? То что здесь описано создает кнопку кастомного типа и инитит звук внутри нее?
Опишите как именно Вы хотите чтобы оно работало
Adem
 Аватар для Adem
6 / 6 / 0
Регистрация: 17.04.2009
Сообщений: 34
20.07.2011, 09:50  [ТС]     Наследование UIButton #5
Так я же в первом посту приложил скрин кастомной и обычной кнопок. У кастомной нет белого фона, и на нажатия она не реагирует.
Splitter
 Аватар для Splitter
201 / 143 / 5
Регистрация: 13.01.2009
Сообщений: 554
20.07.2011, 12:17     Наследование UIButton #6
так бы и сказали, откуда же я знал, что слева - это кнопка, label как label...
В этом случаем можно сделать так, инитите кнопку таким образом

Objective-C
1
2
3
4
5
6
7
8
+(id)buttonWithType:(UIButtonType)buttonType{
    if (self = [UIButton buttonWithType:buttonType]){
        NSString *toneFilename = [NSString stringWithFormat:@"%d", [self.titleLabel.text intValue]];
        NSURL *toneURLRef = [[NSBundle mainBundle] URLForResource:toneFilename withExtension:@"wav"];
        AudioServicesCreateSystemSoundID((CFURLRef)toneURLRef, &toneSSID);
    }
    return self;
}
если Вам нужно чтобы она по нажатию вызывала какой-то свой внутренний метод тогда там можно дописать

C
1
[(UIButton *)self addTarget:self action:@selector(<method>) forControlEvents:UIControlEventTouchDown];
создавать такую кнопку из интерфейс билдера не получится, нужно это сделать програмно...

Objective-C
1
2
3
MButton *mButton = [MButton buttonWithType:UIButtonTypeRoundedRect];
    [mButton setFrame:CGRectMake(100, 100, 200, 40)];
    [self.view mButton];
Думаю можно сделать это и через IB но нужно покопаться в документации, посмотреть как именно он создает и инитит кнопку...
Adem
 Аватар для Adem
6 / 6 / 0
Регистрация: 17.04.2009
Сообщений: 34
20.07.2011, 14:58  [ТС]     Наследование UIButton #7
Спасибо большое, попробую.

так бы и сказали, откуда же я знал, что слева - это кнопка, label как label...
А под картинкой в первом посте есть подпись
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.07.2011, 16:03     Наследование UIButton
Еще ссылки по теме:

UITableView & UIButton
Наследование в Objective C Objective-C
C++/CLI Наследование от IEnumerator<T>: как предотвратить наследование IEnumerator
Наследование шаблоном шаблона (наследование конструктора) C++ Builder
Наследование С# , наследование полей C#

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Splitter
 Аватар для Splitter
201 / 143 / 5
Регистрация: 13.01.2009
Сообщений: 554
20.07.2011, 16:03     Наследование UIButton #8
Цитата Сообщение от Adem Посмотреть сообщение
А под картинкой в первом посте есть подпись
а слона то мы и не заметили )
Цитата Сообщение от Adem Посмотреть сообщение
Спасибо большое, попробую.
не за что
Yandex
Объявления
20.07.2011, 16:03     Наследование UIButton
Ответ Создать тему
Опции темы

Текущее время: 07:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru