2009-07-11 3 views
1

Я новичок в программировании для iPhone, и мне интересно: насколько расширяемы различные элементы управления? Давайте возьмем кнопку в качестве примера:Вопрос о расширяемости Touch Controls Cocoa

  • Могу ли я изменить фоновый рисунок?
  • Могу ли я заставить его расти, когда я нажимаю на него?
  • Могу ли я изменить шрифт?
  • Могу ли я использовать собственный шрифт?
  • Могу ли я использовать символ кнопки вместо текста?

ответ

2

В целом, да, на все ваши вопросы. Вы можете подклассифицировать различные классы UI *, которые составляют элементы управления Touch Cocoa, как и любые другие классы, и добавить свои собственные пользовательские функции в соответствующие методы. Единственная сложная часть - выяснить, куда именно должен идти ваш код.

Давайте посмотрим на ваш пример UIButton и пройдем то, что вы хотите с ним сделать.

Фоновое изображение

Класс UIButton уже имеет метод setBackgroundImage:forState:, который позволяет изменить UIImage на кнопку отображается, когда он находится в одном из нескольких состояний, таких как нормальный, Подчеркнута, инвалидов, и так далее.

Например, чтобы изменить изображение кнопка отображается как обычный фон, чтобы «backgroundImage.png», который представляет собой файл изображения в корешке вашего приложения:

//Presuming you have some UIButton *button: 
UIImage *bgImage = [UIImage imageNamed:@"backgroundImage.png"]; 
[button setBackgroundImage:bgImage forState:UIControlStateNormal];

увеличивались

Вы можете поменять кнопку frame (унаследованное свойство из UIView), добавив метод для этого в файл .m-файла диспетчера представлений, который управляет кнопкой, а затем добавляет этот метод как действие для управляющего события на кнопке.

Предположим, вы хотите удвоить размер кнопки. В viewDidLoad: или где-то подобное, добавьте следующий код:

[button addTarget:self action:@selector(growButton) 
      forControlEvents:UIControlEventTouchDown];

Затем создайте метод growButton со следующим кодом:

- (void)growButton { 
    CGRect currentFrame = button.frame; 
    CGRect newFrame = CGRectMake(currentFrame.origin.x - currentFrame.size.width/2, 
           currentFrame.origin.y - currentFrame.size.height/2, 
           currentFrame.size.width * 2, 
           currentFrame.size.height * 2); 
    button.frame = newFrame; 
}

Это удваивает размер вашего баттона, сохраняя при этом свой центр то же самое. (Будьте осторожны, ваша кнопка не растет на краю вашего зрения, когда вы делаете это.)

Изменение шрифта

Просто измените font свойство UIButton - установить его на новый экземпляр UIFont, как в этом примере:

button.font = [UIFont systemFontOfSize:16.0];

Это меняет шрифт кнопки на шрифт системы с размером 16.

пользовательских шрифтов

Это несколько сложнее вопрос, так как я уверен, что вы не можете загрузить свои собственные пользовательские файлы шрифтов, даже если вы включите их в ваше приложение пачке. Тем не менее, вы можете изменить шрифт по умолчанию для элемента управления с помощью метода класса UFIont fontWithName:size:. Все имена шрифтов доступны с помощью методов UIFont familyNames и fontNamesForFamilyName:.

Кнопка графики вместо текста

Это самый простой из пяти - просто не установить текст на кнопке, но вместо того, чтобы установить фоновое изображение для UIControlStateNormal (см. Выше)

+0

Я только намеревался задать кнопки в качестве примеров, но ничего себе! переключение принятого ответа. – RCIX

+1

Имейте в виду, что все это делается программно (я редко, если вообще когда-либо использую Interface Builder), но вы можете, конечно, использовать IB для достижения большинства из этих вещей. – Tim

3

Да.

1,3,4 и 5 могут быть выполнены без кода, используя атрибуты кнопки в Interface Builder. Чтобы изменить шрифт, поднимите панель шрифтов (Command-T) с выбранной кнопкой.

Для создания кнопки требуется добавление кода, который выполняется при нажатии. Вы можете поместить несколько строк, как это, в свой контроллер, и он должен сделать трюк:

- (void)buttonClicked:(id)sender 
{ 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration: 0.4]; 
    [sender setFrame:CGRectMake(--,--,--,--)]; //replace with slightly bigger button frame 
    [UIView commitAnimations]; 
}