我有一个视图控制器 alertForNeedsClassification 作为另一个类中的属性,如下所示:
@interface SCAAppDelegate()
{
HomeScreenViewController * _homeScreenViewController;
NSInteger SCAStatus;
}
@property (strong, nonatomic) PromptClassifyViewController * alertForNeedsClassification;
@end
@implementation SCAAppDelegate
@synthesize alertForNeedsClassification;
@synthesize window = _window;
PromptClassifyViewController的界面如下所示:
@interface PromptClassifyViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *headerTitle;
@property (weak, nonatomic) IBOutlet UITextView *message;
@property (weak, nonatomic) IBOutlet UIButton *notNowButton;
@property (weak, nonatomic) IBOutlet UIButton *classifyButton;
@property (weak, nonatomic) IBOutlet UIImageView *backgroundImageView;
@property (weak, nonatomic) IBOutlet UIView *alertView;
@property NSUInteger tag;
@property (weak, nonatomic) IBOutlet id<PromptClassifyViewControllerDelegate> delegate;
- (void)show;
- (void)showFromView:(UIView *)view;
- (IBAction)show:(id)sender;
- (IBAction)dismiss:(id)sender;
- (IBAction)buttonWasPressed:(id)sender;
- (void)setHeaderTitleWithText:(NSString *)text;
@end
我正在尝试更改IBOutlets 消息和 headerTitle 文本的值,如下所示:
alertForNeedsClassification = [[PromptClassifyViewController alloc] initWithNibName:@"PromptClassifyViewController" bundle:nil];
//[alertForNeedsClassification setDelegate:self];
self.alertForNeedsClassification.headerTitle.text = @"A title";
alertForNeedsClassification.message.text = @"A message";
然后我显示 alertForNeedsClassification 调用 show 方法(它类似于自定义uialertview,但它不是uialertview的子类)。
事情是,无论我如何改变它,alertForNeedsClassification.view上的文本总是在nib中定义的文本,即。我不能以编程方式更改它。
我的自定义提醒视图基于Jeff LaMarche的设计:http://iphonedevelopment.blogspot.com/2010/05/custom-alert-views.html
有什么想法可能会发生什么?
答案 0 :(得分:0)
分配和初始化UIView
对象时请小心,特别是如果您尝试使用Nib混合并动态生成对象。最佳位置在-(void)awakeFromNib
或-(void)viewDidLoad
另外,请确保调用这些方法。使用-(id)initWithNibName:bundle:
只能确保您的视图无法加载。在parentViewController的视图上尝试-(void)addChildViewController
和-(void)addSubview:
,以确保在初始化后加载视图。
如果必须在加载前准备文本,请将其分配到NSString
类中的单独PromptClassifyViewController
属性。由于此属性独立于正在加载的视图,因此可以在出现视图之前更改其值。确保使用此文本并将其应用于headerTitle
方法中的-(void)show
。
由于您从PromptClassifyViewController
分配weak
并访问headerTitle
self. alertForNeedsClassification
,因此请确保此后不会取消分配。
通常,weak
选项不用于IBOutlet属性。虽然通过从Interface Builder拖动对象来生成插座连接代码时使用它。尝试使用strong
测试您的代码。
答案 1 :(得分:0)
在分配/初始化之前,我正在为IBOutlets分配值。我实现的解决方案是设置非IBOutlet属性所需的值(在本例中为NSStrings)并在需要时分配那些,在Prompt ... Controller的viewDidLoad;