我想改变的图像上来看,从弹出一个对话框4-6标(设想象改变你的形象上的信使用)。我的方式实施这一模式弹出是通过创建一个新的视图在IB、与透明度背景,然后我加载此作为一个子视图:

    IconsViewController *iconsViewController = [[IconsViewController alloc] initWithNibName:@"IconsView" bundle:nil];
[self.view addSubview:iconsViewController.view];

因此,当时的用户接触的一个标,我有

- (IBAction)iconIsSelected:(id)sender {
switch ([sender tag]) {
    case 1:
        [(ParentViewController*)[self superview] changeIcon];
        break;
    case 2:
        // same here..
        break;
    default:
        break;
}
[self.view removeFromSuperview];
[self release];

}

该changeIcon只是设置的 image 到相应标。你可以猜测这不是工作的changeIcon消息永远不会奏效。我不明白我在做什么错误的,任何帮助,非常感谢!

有帮助吗?

解决方案

你有几个选择在这里...

第一个是创建一个酒店对你IconsViewController的类型 ParentViewController*, 例如:

@property (readwrite,nonatomic,assign) ParentViewController* parentController; // weak reference

打破这下一步:

  • readwrite 因为我们希望能够访问的价值通过 [self parentController] 但也改变它通过 [iconsViewController setParentController:self]
  • nonatomic 因为我不是太担心螺纹
  • assign 使它成为一个"弱的参考"如果父母不会留下孩子。如果他们每个人 retain 另一方面,它可能导致记忆的泄漏后,因为除非有明确的释放你会结束了一个圈保留造成的既不是象以打零保留计数。

当你从笔尖,设置该财产:

IconsViewController *iconsViewController = [[IconsViewController alloc] initWithNibName:@"IconsView" bundle:nil];
iconsViewController.parentController = self;

然后,呼吁它从内部的 iconIsSelected 是这样的:

[[self parentController] changeIcon];

此外,您可以创建一个委托协议:

@protocol IconViewSelectedDelegate (NSObject)

- (void) changeIcon;

@end

和使用该议定书作为一个属性,而不是父图控制器类型。这是更抽象的,但它一直在设计清洁。父图控器然后执行这一委托协议,作为一个许多其他人。

另一个选择是使用 NSNotificationCenter 和布/订阅事件从你的动态图。这是"宽松的"之间的联接两种对象,但它可能会被矫枉过正这种情况。

其他提示

视图的上海华是一个视图,而不是一个视图控制器,但你施放上海华成为类ParentViewController的。如果视图没有上海华盈,它返回nil和消息,以零是无操作(这也解释了为什么你不死机那里)。

顺便说一句,该[self release]在末端是高度怀疑。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top