【问题标题】:adding UIView to view with a UIImageView parameter使用 UIImageView 参数将 UIView 添加到视图
【发布时间】:2012-08-01 18:19:14
【问题描述】:

我不知道这有什么问题。我正在尝试向当前视图添加子视图。我allocinitWithNibName 我的SecondViewController 并设置它的myImageView 参数,即UIImageView。问题是添加子视图时,myImageView 没有设置。

这是代码:

- (void)viewDidLoad
{
   [super viewDidLoad];
SecondViewController *secondView = [[SecondViewController alloc]initWithNibName:@"SecondViewController" bundle:nil];

secondView.myImageView.image = [UIImage imageNamed:@"image1.png"];

[self.view addSubview secondView.view];
}

如果我通过 Interface Builder 将图像设置为 myImageView,则它会正确显示在 addSubview 上,但如果我按上述方式设置属性,它将不起作用...UIImageViewoutlet 在 IB 上已正确连接.

这是SecondViewController

@interface SecondViewController : UIViewController
{

}

@property(nonatomic,strong)IBOutlet UIImageView *myImageView;


@end

【问题讨论】:

    标签: ios uiview uiimageview addsubview


    【解决方案1】:

    我相信您的问题是,当您调用 secondView.myImageView.image = [UIImage imageNamed:@"image1.png"]; 时,myImageView 插座尚未设置。 initWithNibName:bundle: 的文档说:“您指定的 nib 文件不会立即加载。它是在第一次访问视图控制器的视图时加载的。”所以你需要这样的代码:

    - (void)viewDidLoad
    {
       [super viewDidLoad];
    SecondViewController *secondView = [[SecondViewController alloc]initWithNibName:@"SecondViewController" bundle:nil];
    
    // Force the nib to load, which subsequently sets the myImageView outlet
    [secondView view];
    
    secondView.myImageView.image = [UIImage imageNamed:@"image1.png"];
    
    [self.view addSubview secondView.view];
    }
    

    但是,我不推荐这种方法。您真的应该在 SecondViewController 的 -viewDidLoad 方法中设置 myImageView 插座的图像。那就是它的归属。

    // SecondViewController.m
    
    - (void)viewDidLoad
    {
         [super viewDidLoad];
    
         self.myImageView.image = [UIImage imageNamed:@"image1.png"];
    }
    

    然后在另一个视图控制器的 -viewDidLoad 方法中,像之前一样将 SecondViewController 的视图添加为子视图:

    - (void)viewDidLoad
    {
         [super viewDidLoad];
    
         SecondViewController *secondVC = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
    
         [self.view addSubview:secondVC.view];
    }
    

    【讨论】:

      【解决方案2】:

      如果你通过 IB 将它设置为 myImageView,它将实例化 myImageView。如果你使用上面的代码,myImageView 是在实例化的。

      您必须在 SecondViewController viewDidLoad 或 initWithFrame 中添加以下行:

      UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,100,100)]
      secondView.myImageView = imageView;
      

      [谢谢H2CO3]

      【讨论】:

      • 没有。您宁愿必须在 SecondViewController 中添加 self.imageView = [[UIImage alloc] init]; - 您的方法会破坏封装。
      • 在 IB 中我添加了一个 UIImageView 并将它的 Outlet 连接到 myImageView。我还需要分配和初始化它吗?
      • 我试过这样做:secondView.myImageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"image1.png"]]; 但它并没有改变任何事情。 =/
      猜你喜欢
      • 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
      相关资源
      最近更新 更多