如何在init方法中更改nib uiimageview图像?

时间:2011-12-20 10:30:18

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

我使用以下代码更改了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;
}

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

1 个答案:

答案 0 :(得分:2)

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

您写的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:或者通过代码创建元素。