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

また、これらのメソッドが呼び出されていることを確認してください。onlyを使用-(id)initWithNibName:bundle:すると、ビューが読み込まれることを確認できません。初期化後にビューがロードされていることを確認するために、parentViewController のビューを試してみてください-(void)addChildViewController-(void)addSubview:

ロードする前にテキストを準備する必要がある場合は、クラスNSString内の別のプロパティに割り当てます。PromptClassifyViewControllerこのプロパティは読み込まれるビューから独立しているため、ビューが表示される前に値を変更できます。このテキストが使用され、inside メソッドに適用されていることを確認してheaderTitleください-(void)show

から参照して割り当てPromptClassifyViewControllerてアクセスするため、直後に割り当てが解除されていないことを確認してください。weakheaderTitleself. alertForNeedsClassification

通常、weakオプションは IBOutlet プロパティには使用されません。Interface Builder からオブジェクトをドラッグしてコンセント接続コードを生成するときに使用されますが。を使用してコードをテストしてみてくださいstrong

于 2012-11-06T02:01:58.710 に答える