0

うまくいけば、より多くのコードでより説明的にするためにこれを書き直しました:

UIView以下のpageTitleViewコードと呼ばれる別のクラスを設定しました:ヘッダーファイル:

 #import <UIKit/UIKit.h>

 @interface pageTitleView : UIView
    @property (nonatomic, strong) IBOutlet UILabel *pageTitle;
    @property (nonatomic, strong) IBOutlet UILabel *subTitle;
 @end

Mファイル:

 @implementation pageTitleView

   @synthesize pageTitle;
   @synthesize subTitle;

  - (id)initWithFrame:(CGRect)frame{

     pageTitle = [[UILabel alloc] initWithFrame:CGRectMake(0,labelPosY,300,20)];
     pageTitle.textColor = txtColour;
     pageTitle.backgroundColor = [UIColor clearColor];
     pageTitle.textAlignment = NSTextAlignmentCenter;
     pageTitle.font = [UIFont systemFontOfSize:14];
     // pageTitle.text to be set by parent view
    [self addSubview:pageTitle];
  }

親のViewControllerには、次のものがあります。

ヘッダーファイル:

  #import <UIKit/UIKit.h>

   @interface UsingThisGuide : UIViewController

     @property (strong, nonatomic) UIView *PageTitleBlock;
     @property (strong, nonatomic) UIWebView *dispalyPageContent;
     @property (strong, nonatomic) UIView *FooterBar;

   @end

Mファイルには次のものがあります。

  #import <QuartzCore/QuartzCore.h>
  #import "pageTitleView.h"
  #import "MyFirstView.h"

  @interface MyFirstView ()

  @end

  @implementation MyFirstView {
   - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{
       self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
         if (self) {
          // Custom initialization
          }
        return self;
     }
   - (void)viewDidLoad {

      _PageTitleBlock = [[pageTitleView alloc] initWithFrame:CGRectMake(0, 0, 300, 50)];
      _PageTitleBlock.layer.cornerRadius = 5;

      _PageTitleBlock.pageTitle.text = @"This should work but not";

      [self.view addSubview:_PageTitleBlock];
      [super viewDidLoad];
    }

 @end

私がやりたいことは、次のようなものを使用して親コントローラーを介しpageTitle.textてクラスから設定することではありませんが、これは私が得ているエラーです:pageTitleViewMyFirstView_PageTitleBlock.pageTitle.text=

  Property 'pageTitle' not found on object of type 'UIView *
4

2 に答える 2

2

はい、たとえば、を使用して簡単に行うことができますproperties

  1. プロパティを定義する前のセクションのTitleBlock(またはpageTitleView)クラスのヘッダーファイル:@interface@end

    @property (nonatomic, retain) UILabel pageTitle;
    

    またはARCプロジェクトの場合

    @property (nonatomic, strong) UILabel pageTitle;
    
  2. 親ビューコントローラでは、フレームから開始する必要が_PageTitleBlockあります

    _PageTitleBlock = [[pageTitleView alloc] initWithFrame:CGRectMake(10, 10, 200, 200)]; // specify needed frame
    // and add it to root view:
    [self.view addSubview:_PageTitleBlock];
    
  3. pageTitleこれで、プロパティにアクセスできます。

    _PageTitleBlock.pageTitle.text = @"Text of page title label";
    

それがあなたを助けることを願っています。

PSクラス名には、大文字の名前を使用することをお勧めします。つまり、PageTitleViewではありませんpageTitleView

于 2012-10-15T19:26:35.663 に答える
1

ここでの問題はPageTitleBlock、type UIViewinで呼び出されたプロパティを宣言しているのに、クラスで宣言されているUsingThisGuide呼び出しを行っていることです。コンパイラはこれを信頼していません。pageTitlepageTitleView

タイプをPageTitleBlockからUIViewに変更pageTitleViewすれば、準備完了です。

于 2012-10-17T20:40:49.543 に答える