Введите текст в UIImageView - PullRequest
1 голос
/ 17 сентября 2009

Можно ли разрешить ввод текста пользователем в UIImageView, так же, как текстовый инструмент в Painter?

Я не могу найти какой-либо ресурс по этой теме?

Ответы [ 2 ]

5 голосов
/ 17 сентября 2009

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
0 голосов
/ 17 сентября 2009

Это невозможно с текущим iPhone API (3.1). Вам нужно будет создать свои собственные пользовательские поля uitextfields и свои собственные методы рендеринга изображений, чтобы объединить слои в подписанную фотографию.

...