Iphone UIView 父方法调用
Posted
技术标签:
【中文标题】Iphone UIView 父方法调用【英文标题】:Iphone UIView parent method call 【发布时间】:2011-04-14 17:05:47 【问题描述】:我遇到了一个问题....请帮忙!
我有一个导航控制器项目。从根控制器,我将一个视图推送到具有一些信息和 2 个按钮(是,否)的堆栈上。 (它不能是 AlertView)。如果他们按下是按钮,我会调用父视图上的一个方法(使用委托方法)并从堆栈中弹出视图。父级上的方法将新视图推送到堆栈上。我假设父方法在子视图释放后将保留在内存中,因为该方法存在于父视图中,但是当子视图被释放时,它也会释放在父视图中创建的所有内容。有没有人有解决方案来响应父视图中子视图上发生的事件,该事件在子视图被释放后仍将保留?
谢谢!
在头文件中:
#import <UIKit/UIKit.h>
@protocol decrementDelegate;
@interface decrement : UIViewController
int currentCount;
IBOutlet UILabel *countLabel;
id <decrementDelegate> delegate;
@property (nonatomic, assign) id <decrementDelegate> delegate;
@end
@protocol decrementDelegate <NSObject>
-(void)decrementControllerDidFinish:(decrement *)controller
withString:(NSString *)stringValue;
@end
在实现文件中:
[self.delegate decrementControllerDidFinish:self
withString:countLabel.text];
[self.navigationController popViewControllerAnimated:YES];
来电者:
-(void)decrementControllerDidFinish:(decrement *)controller
withString:(NSString *)stringValue
// Show our details
myNewChildController *viewController = [[myNewChildController alloc]
initWithNibName:@"myNewChildController" bundle:nil];
viewController.delegate = self;
[self.navigationController pushViewController:viewController animated:YES];
[viewController release];
使用非委托并仅在父级上调用方法:
来电者:
mySummary *parent = [self.navigationController.viewControllers objectAtIndex:0];
[mySummary setMyAllowOnParent:@"Allowed"];
[self.navigationController popViewControllerAnimated:YES];
父母:
-(void)setMyAllowOnParent:(NSString *)aAllow
newView *viewController = [[newView alloc] initWithNibName:@"newView" bundle:nil];
[self.navigationController pushViewController:viewController animated:YES];
[viewController release];
当调用者视图被释放时,newView 崩溃并出现释放错误。有谁知道如何解决这个问题?
【问题讨论】:
【参考方案1】:您是如何创建代理的?您没有意外使用 retain 而不是 assign (假设您使用属性来访问它)?因为如果您使用了保留,这可能会导致问题。
顺便说一句,您提到了一些无法使用的 UIAlertView,这使我认为您创建的视图与 UIAlertView 的设计相似。也许以下链接可能有用:
how can i make popup login window similar as on istore in objective-C/cocoa-touch
【讨论】:
Wolgang,感谢您的快速回复。这是我的委托@interface 递减: UIViewController id以上是关于Iphone UIView 父方法调用的主要内容,如果未能解决你的问题,请参考以下文章
UIView的layoutSubviews和drawRect方法何时调用
iPhone UIView touchesMoved: withEvent: 不会在 UIView 上使用手势识别器调用
UIView、UIScrollView 和 UITextFields 问题调用方法
iOS:UIView子类init会调用[super init]然后调用超类中的方法,为啥会调用[subclass initWithFrame:xx]?