【问题标题】:How to change the nib uiimageview image inside init method?如何在 init 方法中更改 nib uiimageview 图像?
【发布时间】:2011-12-20 10:30:18
【问题描述】:

我使用以下代码更改了 uiimageview 的图像,这对我有用

-(void)viewDidLoad{
     [super viewDidLoad];
     UIImage *tempImage = [UIImage imageNamed:@"instant_poetry_small.png" ];
     drawImage.image = tempImage;
}


-(id)initWithImage:(NSString *)img{
    [super viewDidLoad];
    return self;
}

但我想在 init 方法中更改 uiimageview 的图像。为此,我尝试了以下代码,但它没有改变 uiimageview 的图像。

-(void)viewDidLoad{
     [super viewDidLoad];
}


-(id)initWithImage:(NSString *)img{
    [super viewDidLoad];
    UIImage *tempImage = [UIImage imageNamed:@"instant_poetry_small.png" ];
    drawImage.image = tempImage;
    return self;
}

下面是我的应用程序委托方法

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [[TTURLRequestQueue mainQueue] setMaxContentLength:0];

     TTNavigator *navigator = [TTNavigator navigator];
    navigator.window = _window;

    TTURLMap *map = navigator.URLMap;
    [map from:@"tt://appPhotos" toSharedViewController:[PhotoViewController class]];
    [map from:@"tt://photo/detail?name=(initWithImage:)" toSharedViewController:[PhotoView class]];
    [navigator openURLAction:[TTURLAction actionWithURLPath:[NSString stringWithFormat:@"tt://photo/detail?name=%@",@"level_me_up_small.png"]]];

    [_window makeKeyAndVisible];

    return YES;
}

你能告诉我上面的示例代码有什么区别吗?

【问题讨论】:

  • 任何人都可以告诉我,我们如何在运行时更改 xib 的 uiimageview 对象中的图像。我正在使用 initWithNibName 加载我的 xib 并想更改我的 xib 中的图像。
  • - (void)loadView{ [super loadView]; [self.navigationController setNavigationBarHidden:YES animated:YES]; self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"Save" style:UIBarButtonItemStyleBordered target:self action:@selector(save:) ]; NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"PhotoView" owner:self options:nil]; for(id oneObject in nib){ self.view = (UIView *)oneObject; } UIImage *camImage = [[UIImage imageNamed:self.imageName] retain]; drawImage.image = camImage; [camImage release]; }
  • -(id)initWithImage:(NSString *)img{ self.imageName = img; NSString *imgName = [NSString stringWithFormat:@"%s",self.imageName]; return self; }
  • 我通过以上两种方法解决了我的问题。

标签: iphone objective-c ios cocoa-touch three20


【解决方案1】:

viewDidLoad 方法中,nib 已完成加载,所有 UI 元素都可用。 不要从init 调用viewDidLoad,因为现在可以判断视图(读取笔尖)是否已加载。

您编写的initWithImage 方法不正确,并且不能以这种方式工作。 如果你确实想创建一个自定义init,它更像这样”

-(id)initWithImage:(NSString *)img{
   self= [super init];

   if (self) {
      // Create a property for this call where you keep the image.
      self.drawImage = [UIImage imageNamed:img];
   }

   return self;
}

但这不会加载任何 NIB,因此您必须调用 super initWithNIB: 或通过代码创建元素。

【讨论】:

  • 根据我在应用程序委托中的 didFinishLaunchingWithOptions 我重定向到我的 PhotoView 类中的 initWithImage 方法。如果我在我的 init 中评论了 [super viewDidLoad],那么我仍然无法更改 uiimageview 中的图像。好的,你能告诉我当我重定向到我的应用程序委托中的 PhotoView 类时首先调用哪个方法??
  • 不,我不能,你使用我从未使用过的 Three20。但我建议您开始了解UIViewController 是如何构建的。调用 init 方法是第一个被调用的方法,之后才会调用 NIB
  • 我发现当我重定向到我的照片视图类时,iniWithImage 是首先调用的方法,然后调用 viewDidLoad。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-05
  • 1970-01-01
  • 1970-01-01
  • 2019-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多