在UIImageView上输入文本

1 iphone text editing

是否可以在UIImageView上允许用户输入文本,就像画家中的文本工具一样?

我在这个主题上找不到任何资源?

Tyl*_*ler 5

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];
Run Code Online (Sandbox Code Playgroud)

如果你添加a UITextField作为a的子视图,UIImageView设置userInteractionEnabledto 是很重要的YES,因为它默认NO为该superview(YES在大多数UIViews中通常默认为).

附录

如果您希望用户能够单击图像中的任何位置来编辑文本,可以使用以下方法:子类UIControl并添加a UIImageView和a UITextField作为子视图,并将点击操作连接UIControlUITextField.这样的事情(警告:没有经过测试的代码,但它传达了一般的想法):

@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
Run Code Online (Sandbox Code Playgroud)