0

、およびを使用したiPadアプリがあります。を含むシーンがあります。その中に、すべて IB を使用して作成された があります。プログラムで、2 つ(1 つは、もう1 つは ) を作成し、それらを;に追加しました。どちらもシミュレータで正しく表示されます。コードは次のとおりです。StoryboardsXCode 4.6iOS 6.1UIViewControllerUIViewControllerUIScrollControllerviewDidLoadUIViewssubViewGridsubViewDataUIViewController

- (void)viewDidLoad  {

[super viewDidLoad];

// notify me when calendar has been tapped and CFGregorianDate has been updated
[[NSNotificationCenter defaultCenter] removeObserver:self];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(calendarTapNotification:)
                                             name:@"calendarDateSelected" object:nil ];

//   UIScrollVIew settings
CGSize scrollableSize = CGSizeMake(760, 1379);  //  set size of scheduleView
[self.schedScrollView setContentSize:scrollableSize];
self.schedScrollView.contentInset = UIEdgeInsetsMake(0,0,44,44);  //  allow for scroll bar
self.schedScrollView.directionalLockEnabled = YES;  //  prevents diagonal scrolling

//  create a sub-view to hold the appointment GRID
CGRect frame = CGRectMake(0,0,760,1390);  //  110,48,760,1390
subViewGrid = [[UIView alloc] initWithFrame:frame];
subViewGrid.tag = 12;  //  use tag to get correct sub-view
subViewGrid.backgroundColor = [UIColor grayColor];
subViewGrid.alpha = 1.0;  //  make it opaque
[self.schedScrollView addSubview:subViewGrid];

//  create a sub-view to hold the appointment DATA
frame = CGRectMake(110,48,670,750); 
subViewData = [[UIView alloc] initWithFrame:frame];
subViewData.tag = 22;  //  use tag to get correct sub-view
subViewData.backgroundColor = [UIColor redColor];
subViewData.alpha = 0.2;  //  make it sort of transparent
[self.schedScrollView addSubview:subViewData];

[self.subViewGrid setNeedsDisplay];  //  ****  UPDATED ****

}

.hファイルの内容は次のUIViewControllerとおりです。

    @interface CalendarViewController : UIViewController  {

    UIView *subViewGrid;
    UIView *subViewData;

}

@property (strong, nonatomic) IBOutlet UIScrollView *schedScrollView;

- (void) calendarTapNotification:(NSNotification *) notification;
-(NSDate *)beginningOfDay:(NSDate *)date;
-(NSDate *)endOfDay:(NSDate *)date;

@end

私のdrawRect方法では、subViewGrid に「グリッド」を描画するコードがいくつかあります。問題drawRectが呼び出されることはありません。

Programmer's Guideを読み、UIViewSO を調べ、Google 検索を実行しましたが、問題に対処するものは見つかりませんでした。つまり、配置した場所から[self.subViewGrid setNeedsDisplay]呼び出されないのはなぜdrawRectですか?

4

2 に答える 2

3

ビュー コントローラーはsetNeedsDisplay、それ自体ではなく、それが制御するビューを呼び出す必要があります。あなたが望んでいるのは

 [self.subViewGrid setNeedsDisplay]
于 2013-02-24T17:23:56.657 に答える
1

これは、ドキュメントを読む際の単なるエラーです。ドキュメントを理解することは Objective-C プログラミングにとって非常に重要です。

ドキュメントをsetNeedsDisplay見ると、それがCALayerまたはUIViewクラスメソッドであることがわかります。次に継承を見ると、UIViewisUIResponder:NSObjectCALayerisであることがわかりますNSObject。これらのどれも継承しUIViewControllerていないため、エラーが発生しています。電話する必要があります[self.subViewGrid setNeedsDisplay]

于 2013-02-24T17:29:24.080 に答える