[英]Why isn't my UILabel being changed inside queryPedometerDataFromDate?
[英]Why isn't my UILabel being set?
我有2個視圖控制器。 viewController1有一個名為nameLabel的UILabel,我想在另一個類viewController2中進行設置。
我嘗試從viewController2調用此代碼。
Content1ViewController *viewController1 = [Content1ViewController new];
viewController1.nameLabel.text = @"HELLO";
NSLog(@"%@",viewController1.nameLabel);
但是,當我調用代碼時,viewController1 nameLabel不會改變嗎? 另外,NSLog返回“ null”? 有人可以告訴我為什么會發生這種情況,也可以告訴我如何從其他類中更改nameLabel嗎? 謝謝!
手動創建實例時,控件未初始化。 這是在視圖控制器生命周期的稍后階段完成的。
如果我沒記錯的話,您將看到初始化控件的第一個事件是viewDidLoad
您可以做的就是添加一個名為nameLabelText
的NSString
屬性,並執行nameLabel.text = nameLabelText;
在viewDidLoad
您需要使用與窗口相同的viewController實例。 如果viewController2
推入導航控制器堆棧中, viewController1
從導航堆棧中獲取viewController1
實例,然后嘗試設置標簽。
如果您使用的是當前模態,則可以使用viewController2
presentingViewController
實例來訪問viewController1
實例,例如
viewController1 *controller = [viewController2 presentingViewController];
[controller.nameLabel setText:@"WhatEver"];
您在哪里設置了namelabel屬性? 您是使用Interface Builder(XIB還是Storyboard)還是用代碼完成了所有這些工作? 如果您在InterfaceBuilder中完成了
[Content1ViewController new]
是錯誤的方法。 對於XIB文件,您應該使用
initWithNibName:(NSString *)nibName
bundle:(NSBundle *)nibBundle
如果您的ViewController是在情節提要中定義的,則應使用
instantiateViewControllerWithIdentifier:(NSString *)identifier
從UIStoryboard
。
但是正如克勞迪奧·雷迪(Claudio Redi)所說的那樣,最早可以訪問UILabel的地方將在viewDidLoad
如果代碼中包含所有內容,則應將
[self setNameLabel:[[UILabel alloc] initWithFrame:CGRectMake(50.0f,50.0f,100.0f,100.0f)];
在ViewController的init
-Method中。
//
// ViewController.m
// UIPageViewControllerDemo
//
// Created by YunYi1118 on 15/5/20.
// Copyright (c) 2015年 Xiaoyi. All rights reserved.
//
#import "ViewController.h"
#import "MoreViewController.h"
@interface ViewController () <UIPageViewControllerDataSource, UIPageViewControllerDelegate>
@property (strong, nonatomic) UIPageViewController *pageController;
@property (strong, nonatomic) NSArray *pageContent;
@end
@implementation ViewController
@synthesize pageContent = _pageContent;
@synthesize pageController = _pageController;
- (void)viewDidLoad {
[super viewDidLoad];
[self createContentPages];
NSDictionary *options = [NSDictionary dictionaryWithObject:[NSNumber numberWithInteger:UIPageViewControllerSpineLocationMin] forKey:UIPageViewControllerOptionSpineLocationKey];
self.pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:options];
_pageController.dataSource = self;
_pageController.view.frame = self.view.bounds;
MoreViewController *initialViewController = [self viewControllerAtIndex:0];
NSArray *viewControllers = [NSArray arrayWithObject:initialViewController];
[self.pageController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
[self addChildViewController:_pageController];
[self.view addSubview:_pageController.view];
}
- (MoreViewController *)viewControllerAtIndex:(NSUInteger)index
{
if (self.pageContent.count == 0 || index >= self.pageContent.count) {
return nil;
}
MoreViewController *dataViewController = [[MoreViewController alloc] init];
dataViewController.dataObject = [self.pageContent objectAtIndex:index];
return dataViewController;
}
- (void)createContentPages
{
NSMutableArray *pageStrings = [NSMutableArray array];
for (int i = 1; i < 11; i++) {
NSString *contentString = [[NSString alloc] initWithFormat:@"Chapter%d, This is the page %d of content displayed using UIPageViewController ",i,i];
[pageStrings addObject:contentString];
}
self.pageContent = [NSArray arrayWithArray:pageStrings];
}
#pragma mark - delegate
- (NSUInteger)indexOfViewController:(MoreViewController *)viewController
{
return [self.pageContent indexOfObject:viewController.dataObject];
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
NSUInteger index = [self indexOfViewController:(MoreViewController *)viewController];
if (index == 0 || index == NSNotFound) {
return nil;
}
index--;
return [self viewControllerAtIndex:index];
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
NSUInteger index = [self indexOfViewController:(MoreViewController *)viewController];
if (index == NSNotFound) {
return nil;
}
index++;
if (index == self.pageContent.count) {
return nil;
}
return [self viewControllerAtIndex:index];
}
@end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.