【问题标题】:UIView setNeedsDisplay doesn't workUIView setNeedsDisplay 不起作用
【发布时间】:2013-03-11 08:35:20
【问题描述】:

简单代码在这里:

自定义 MyButton.h

@interface PaiLifeReadingListButton : UIButton
@property (strong, nonatomic) UIImageView *logoImageView;
@end

自定义 MyButton.m

@implementation PaiLifeReadingListButton
@synthesize logoImageView = _logoImageView;
-(id)init
{
    _logoImageView = [[UIImageView alloc] initWithFrame:CGRectMake(33.0, 20.0, 80.0, 80.0)];
    [_logoImageView setImage:[UIImage imageNamed:@"pic"]];
    [self addSubview: _logoImageView];
}  
@end

自定义 MyView.h:

@property (strong, nonatomic) Mybutton *mybutton;

自定义 MyView.m:

-(id) init
{
    myButton = [[MyButton alloc] init];
    [self addSubview:myButton];
}

ViewController.m:

@synthesize myView;
- (void)viewDidLoad
{
    myView = [[Myview alloc] init];
    [myView.myButton addTarget:self action:@selector(pressed:) forControlEvents:UIControlEventTouchDown];
    self.view = myView;
}
-(void)pressed : (MyButton *)button
{
    UIImageView *newImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"other-pic"] highlightedImage:nil];
    myView.myButton.logImageView = newImageView;
    [self.view setNeedsDisplay]; //----this does not work
}

当我按下按钮时,图像视图不会改变。我怎样才能解决这个问题? 非常感谢!

【问题讨论】:

  • 设置newImageView.frame = logImageView.frame。不需要调用setNeedsDisplay。
  • button 是什么,myButton 是在哪里添加的?
  • @MidhunMP 对不起,我犯了一个错误,我更改了代码。
  • @dhcdht 不,它对我不起作用。
  • 这也不是覆盖初始化器的最佳方法,在这种情况下,您应该覆盖指定的初始化器 (-initWithFrame:)

标签: ios uiview setneedsdisplay


【解决方案1】:

首先,这里不需要setNeedsDisplaysetNeedsDisplay 用于重绘视图(如果需要,它会在内部调用视图的 drawRect: 方法),这不是您想要的。

其次,您将按钮的类指定为MyButton,但在实际的.h 和.m 文件中,它分别指定为@interface PaiLifeReadingListButton@implementation PaiLifeReadingListButton

另一件事,视图和按钮没有用框架初始化。但我假设你已经这样做了,因为你唯一的问题是图像视图没有改变。

【讨论】:

    【解决方案2】:

    在按下方法的代码中,您应该更改层次结构中的视图,但您只更改对象成员。你可以做类似的事情

    myView.myButton.logImageView.image = [UIImage imageNamed:@"other-pic"];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多