0

我有一个视图控制器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";

然后我显示调用show方法的alertForNeedsClassification(它类似于自定义 uialertview,但它不是 uialertview 的子类)。

问题是,无论我如何更改它,alertForNeedsClassification.view 上的文本始终是笔尖中定义的文本,即。我无法以编程方式更改它。

我的自定义警报视图基于 Jeff LaMarche 的设计:http: //iphonedevelopment.blogspot.com/2010/05/custom-alert-views.html

任何想法可能会发生什么?

4

2 回答 2

0

在分配/初始化之前,我正在为 IBOutlets 分配值。我实施的解决方案是将我需要的值设置为非 IBOutlet 属性(在这种情况下为 NSStrings),并在需要时在 Prompt...Controller 的 viewDidLoad 中分配这些值;

于 2012-11-06T03:09:08.210 回答
0

分配和初始化对象时请小心UIView,尤其是在尝试使用 Nib 混合并动态生成对象时。最好的地方是在-(void)awakeFromNib-(void)viewDidLoad

此外,请确保调用这些方法。仅使用-(id)initWithNibName:bundle:无法确保您的视图被加载。尝试在 parentViewController 的视图上-(void)addChildViewController-(void)addSubview:以确保在初始化后加载视图。

如果必须在加载之前准备文本,请将其分配给类中的单独NSString属性PromptClassifyViewController。由于此属性独立于正在加载的视图,因此您可以在视图出现之前更改它的值。确保使用此文本并将其应用于headerTitleinside-(void)show方法。

由于您分配PromptClassifyViewController和访问weak引用headerTitleself. alertForNeedsClassification,因此请确保之后不会立即释放它。

通常,weak选项不用于 IBOutlet 属性。虽然它在通过从 Interface Builder 中拖动对象来生成插座连接代码时使用。尝试使用strong.

于 2012-11-06T02:01:58.710 回答