UIImageView
не предназначен для содержания какого-либо текста, но вы можете добавить UILabel
или UITextField
либо внутри него, либо сверху / снизу от него, в зависимости от того, что вы хотите сделать.
Например, предположим, что вы хотите разрешить пользователю редактировать фрагмент текста внутри изображения. Вы могли бы сделать что-то вроде этого:
UIImage* image = [UIImage imageNamed:@"my_image.png"];
UIImageView* imageView = [[UIImageView alloc] initWithImage:image];
imageView.userInteractionEnabled = YES;
UITextField* textField = [[UITextField alloc]
initWithFrame:CGRectMake(10, 10, 50, 20)];
textField.placeholder = @"type here";
[imageView addSubview:textField];
// You might also want to set the imageView's frame.
[self.view addSubview:imageView];
Если вы добавляете UITextField
в качестве подпредставления UIImageView
, важно установить userInteractionEnabled
в YES
, поскольку для этого суперпредставления по умолчанию установлено значение NO
(по умолчанию обычно это YES
) в большинстве UIView
с).
Добавление
Если вы хотите, чтобы пользователь мог щелкнуть в любом месте изображения для редактирования текста, вот один из способов сделать это: подкласс UIControl
и добавить UIImageView
и UITextField
в качестве его подпредставлений, и подключите действие щелчка UIControl
к UITextField
. Примерно так (ВНИМАНИЕ: не проверенный код, но он передает общую идею):
@interface ImageAndTextView : UIControl {
UIImageView* imageView;
UITextField* textField;
}
@property (nonatomic, retain) UIImageView* imageView;
@property (nonatomic, retain) UITextField* textField;
- (void) click;
@end
@implementation ImageAndTextView
@synthesize imageView, textField;
- (id) initWithFrame: (CGRect) frame_ {
if (self = [super initWithFrame:frame_]) {
UIImage* image = [UIImage imageNamed:@"my_image.png"];
self.imageView = [[[UIImageView alloc] initWithImage:image] autorelease];
imageView.userInteractionEnabled = YES;
[self addSubview:imageView];
CGRect textFrame = CGRectMake(10, 10, 50, 20); // whatever frame you want
self.textField = [[[UITextField alloc]
initWithFrame:textFrame] autorelease];
[self addSubview:textField];
// Now register an event to happen if the user clicks anywhere.
[self addTarget:self action:@selector(click)
forEvent:UIControlEventTouchUpInside];
}
return self;
}
- (void) click {
[textField becomeFirstResponder];
}
@end