0

そのため、サブビューをアプリに表示しようとして、一日中苦労していました。エラーやクラッシュは発生していませんが、サブビューが表示されません。

メイン ViewController からサブビューを呼び出すコード (ボタンがタップされたときに呼び出されます):

- (IBAction)SettingsButtonTapped:(id)sender {
  SettingsView *settings= [[SettingsView alloc]initWithFrame:CGRectMake(0,0,100,100)];
  //Thank you to Calman for fixing the init!
  [self.view addSubview:settings];
}

サブビュー .h ファイルは次のとおりです。

#import <UIKit/UIKit.h>

@interface SettingsView : UIView
@property (weak, nonatomic) IBOutlet UITextField *username;
@property (weak, nonatomic) IBOutlet UITextField *phoneNumber;
@property (weak, nonatomic) IBOutlet UIBarButtonItem *BackButton;

@end

および .m ファイル:

#import "SettingsView.h"
#import "ViewController.h"

@implementation SettingsView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
      NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
      NSString *name = [prefs stringForKey:@"name"];
      NSString *number = [prefs stringForKey:@"number"];
      username.tag=1;
      phoneNumber.tag=2;
      //if username is there
      if(name!=NULL)
      {
        username.text = name;
      }

      //if phone number is there
      if(number!=NULL)
      {
        phoneNumber.text=number;
      }

    }
    return self;
}

/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
    // Drawing code
}
*/
@synthesize username;
@synthesize phoneNumber;

- (void)textFieldDidEndEditing:(UITextField *)textField
{
  NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
  NSString *data=textField.text;
    if(textField.tag==1){
    //username was edited
    [prefs setObject:data forKey:@"name"];
  }
  else if (textField.tag==2){
    //phone number was edited
    [prefs setObject:data forKey:@"number"];
  }
}


@end

誰かが何がうまくいかないのか知っているか、アイデアを持っている場合は、ぜひ聞いてください!

4

2 に答える 2

0

subvoew を追加するために使用しているコードを次のように変更してみてください。

- (IBAction)SettingsButtonTapped:(id)sender {
  SettingsView *settings= [[SettingsView alloc]initWithFrame:CGRectMake(0,0,100,100)]; //Change the CGRect to your appropriate origin and size
  [self.view addSubview:settings];
}

現在行っているのは、フレームなしでビューをインスタンス化することです。そのため、追加しても表示されません。さらに、init だけを呼び出すと、実際には初期化コードが呼び出されません。

于 2013-05-22T21:10:12.863 に答える
0

xib ファイルを使用している場合は、間違った init メソッドを使用しています。次のように nib をロードする必要があります。

- (IBAction)SettingsButtonTapped:(id)sender {

  UINib *nib = [UINib nibWithNibName:@"SettingsView" bundle:nil];
  SettingsView *settings= [nib instantiateWithOwner:self options:nil][0];
  [self.view addSubview:settings];
}
于 2013-05-22T22:30:25.683 に答える