2011-02-07 4 views
2

Я пытаюсь сделать кнопку, которая в основном имитирует кнопки, видимые на домашнем экране iphone - у него есть изображение, размещенное вертикально над некоторым текстом, и оба являются частью кнопки и ведут себя соответственно (тусклый , clickable и т. д.), когда выделено.UIButton с изображением и текстом

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

Использование свойства background image не работает, потому что я хочу изображение над текстом - область, лежащая за текстом, должна быть прозрачной. Я бы ДЕЙСТВИТЕЛЬНО предпочел программное решение вместо того, чтобы входить и редактировать все мои фотографии.

+0

Смотрите этот ответ http://stackoverflow.com/a/11847383/1418457 – onmyway133

ответ

3

Создайте подкласс UIView и создайте UIImageView и UILabel в качестве подзонов и соответствующим образом разместите их с помощью кода.

Вы бы тогда иметь UIImageView и UILabel как свойства, так что вы можете получить доступ к ним, как это:

myCustomButton.imageView.image = [UIImage imageNamed:@"..."]; 
myCustomButton.textLabel.text = @"..."; 

Или вы могли бы, вероятно, найти третью партию пользовательских UIView, в Интернете на GitHub или что-то ,

+0

Постараюсь это одно, спасибо! – Mark

+0

еще не попробовали, но это нормально реагирует на кнопку? (будет ли изображение и текст «тусклым» или «серым» при нажатии кнопки?) Каков правильный способ получения нового подкласса UIView в кнопку? – Mark

+0

Вам нужно было сделать затемнение самостоятельно. Возможно, вы могли бы подклассифицировать UIButton, а не UIView, в котором вам, вероятно, не понадобится. –

1

Идея Джонатана - хорошая, но если вы делаете это только с помощью нескольких изображений, это не стоит проблем. Вы можете создать UIImage и UILabel, а затем поместить их в UIButton в построителе интерфейса.

Тем не менее, это всегда хорошая идея, чтобы узнать о таких мощных функциях, как подклассы.

Успехов,

Aurum Aquila

+0

Спасибо, но я хочу попробовать и сделать это «правильным» способом :) – Mark

+0

но ... из любопытства, как вы добавляете UIImage и UILabel в UIButton в Interface Builder? – Mark

+1

Я должен был быть более понятным - вы создаете образ и ярлык, а затем наводите на него UIButton. Затем вы меняете тип UIButton на пользовательский. Затем он будет принимать события касания, но вы не сможете его увидеть. –

0

Создать новый первоначально прозрачный контекст растровый рисунок, нарисовать изображение в верхней части и текст в нижней части. Затем создайте новое изображение из этого контекста чертежа и используйте это новое изображение для кнопки.

+0

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

+0

Невозможно предварительно отредактировать, если текст и изображение являются независимыми. Или если у вас есть миллион изображений. – hotpaw2

1

сделать это:

UIButton *btn_chat = [UIButton buttonWithType:UIButtonTypeCustom]; 
btn_chat.frame = CGRectMake(40, 50, 100, 30);//CGRectMake(20, 20, 200, 72); 
UIImage *image = [UIImage imageNamed:@"chat.png"]; 
CGSize newSize = CGSizeMake(30, 30); 
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0); 
[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)]; 
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();  
UIGraphicsEndImageContext(); 
[btn_chat setImage:newImage forState:UIControlStateNormal]; 
btn_chat.imageEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0); 
[btn_chat setTitle:@"Chat" forState:UIControlStateNormal]; 
btn_chat.titleEdgeInsets = UIEdgeInsetsMake(0, 20, 0, 0); 
btn_chat.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; 
[btn_chat addTarget:self action:@selector(menuSelection:) forControlEvents:UIControlEventTouchUpInside]; 
[btn_chat setTag:1001]; 
[self.view addSubview:btn_chat]; 

и это сделано :)

+0

Не работает ... –

Смежные вопросы