簡體   English   中英

為什么未設置我的UILabel?

[英]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

您可以做的就是添加一個名為nameLabelTextNSString屬性,並執行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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM