Текст UILabel не обновляется

Главный вид имеет метку и кнопку. Я добавил одно подпредставление, содержащее UILabel и кнопку. Что я хочу сделать, так это обновить две метки в обоих представлениях, нажав одну из двух кнопок. Проблема в том, что если я нажму кнопку подпредставления, метка подпредставления будет только обновлена. И наоборот, метка основного вида изменяется только тогда, когда я нажимаю кнопку в основном виде.

Мне интересно, как обновить каждый label.text другого представления.

Заранее спасибо...

Вот мой код. 1. ViewController.h

#import <UIKit/UIKit.h>
#import "SubView.h"

@interface ViewController : UIViewController{
    SubView *subView;
}

@property (weak, nonatomic) SubView *subView;
@property (retain, nonatomic) IBOutlet UILabel *amount;

@end

2. ViewController.m

#import "ViewController.h"
#import "SubView.h" 

@interface ViewController ()

@end

@implementation ViewController

@synthesize subView=_subView;
@synthesize amount;

- (void)viewDidLoad
{
    [super viewDidLoad];

    subView = [[SubView alloc]initWithFrame:CGRectMake(10, 10, 300, 600)];

    [self.view addSubview:subView];

    amount = [[UILabel alloc]initWithFrame:CGRectMake(400, 400, 100, 50)];
    amount.text = @"test in the main view";
    [self.view addSubview:amount];

    UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    btn.frame = CGRectMake(400, 300, 40, 20);
    btn.backgroundColor = [UIColor clearColor];
    [btn addTarget:self action:@selector(labelChange:)    
    forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn]; // add a button in the main view
// Do any additional setup after loading the view, typically from a nib.
}

- (IBAction)labelChange:(id)sender{
    amount.text = @"defaul label";

    SubView *sv = [[SubView alloc]init];
    sv.addObject2.text = @"label in the subview";

    NSLog(@"sv.addObject2.text = %@",sv.addObject2);
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
}

 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return YES;
}

@end

3. Подвид.h

#import <UIKit/UIKit.h>

@interface SubView : UIView {

    UIButton *btn;
    UILabel *label;
}
//@property (strong, nonatomic) UIView *view;
@property (weak, nonatomic) UIButton *btn;
@property (weak, nonatomic) UILabel *label;

- (UIButton *)addObject1;
- (UILabel *)addObject2;

@end

4. Подвид.м

#import "SubView.h"
#import "ViewController.h"

@implementation SubView
@synthesize btn=_btn, label=_label;
//@synthesize view;

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    //UIView *contentView = [[UIView alloc]initWithFrame:frame];


    self.backgroundColor = [UIColor blackColor];

    UIButton *object1 = [self addObject1];
    UILabel *object2 = [self addObject2];

    [self addSubview:object1];
    [self addSubview:object2];

    return self;
}

- (UIButton *)addObject1{
    btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    btn.frame = CGRectMake(10, 10, 100, 20);
    btn.backgroundColor = [UIColor clearColor];

    [btn addTarget:self action:@selector(labelChange:)     forControlEvents:UIControlEventTouchUpInside];

    return btn;
}

- (IBAction)labelChange:(id)sender{
    label.text = @"change the label in the subview";
    ViewController *vc = [[ViewController alloc]init];
    [vc.amount setText:@"change the label in the mainview"];


}    

- (UILabel *)addObject2{

    label = [[UILabel alloc]initWithFrame:CGRectMake(10, 50, 200, 50)];
    [label setText: @"default"];
    label.backgroundColor = [UIColor clearColor];
    label.font = [UIFont fontWithName:@"Arial" size:12];
    label.textColor = [UIColor whiteColor];

    return label;
}


@end

person user1629100    schedule 28.08.2012    source источник


Ответы (2)


Я думаю, вам нужно прочитать "Язык программирования Objective-C" и знать, что означают "Объект" и "Указатель"

Вот код

SubView.h

#import <UIKit/UIKit.h>

@interface SubView : UIView {

    UIButton *btn;
    UILabel *label;
}
@property (weak, nonatomic) UIViewController *vc;
@property (weak, nonatomic) UIButton *btn;
@property (weak, nonatomic) UILabel *label;

- (UIButton *)addObject1;
- (UILabel *)addObject2;

@end

Подвид.м

#import "SubView.h"
#import "ViewController.h"

@implementation SubView
@synthesize btn=_btn, label=_label;
@synthesize vc;

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    self.backgroundColor = [UIColor blackColor];

    UIButton *object1 = [self addObject1];
    UILabel *object2 = [self addObject2];

    [self addSubview:object1];
    [self addSubview:object2];

    return self;
}

- (UIButton *)addObject1{
    btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    btn.frame = CGRectMake(10, 10, 100, 20);
    btn.backgroundColor = [UIColor clearColor];

    [btn addTarget:self action:@selector(labelChange:)     forControlEvents:UIControlEventTouchUpInside];

    return btn;
}

- (IBAction)labelChange:(id)sender{
    label.text = @"change the label in the subview";
    [vc.amount setText:@"change the label in the mainview"];
}    

- (UILabel *)addObject2{
    label = [[UILabel alloc]initWithFrame:CGRectMake(10, 50, 200, 50)];
    [label setText: @"default"];
    label.backgroundColor = [UIColor clearColor];
    label.font = [UIFont fontWithName:@"Arial" size:12];
    label.textColor = [UIColor whiteColor];

    return label;
}


@end

ViewController.m

#import "ViewController.h"
#import "SubView.h" 

@interface ViewController ()

@end

@implementation ViewController

@synthesize subView=_subView;
@synthesize amount;

- (void)viewDidLoad
{
    [super viewDidLoad];

    subView = [[SubView alloc]initWithFrame:CGRectMake(10, 10, 300, 600)];
    subView.vc = self;
    [self.view addSubview:subView];

    amount = [[UILabel alloc]initWithFrame:CGRectMake(400, 400, 100, 50)];
    amount.text = @"test in the main view";
    [self.view addSubview:amount];

    UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    btn.frame = CGRectMake(400, 300, 40, 20);
    btn.backgroundColor = [UIColor clearColor];
    [btn addTarget:self action:@selector(labelChange:)    
    forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn]; // add a button in the main view
}

- (IBAction)labelChange:(id)sender{
    amount.text = @"defaul label";

    subview.addObject2.text = @"label in the subview";
}

@end
person DJean    schedule 28.08.2012
comment
Спасибо за вашу рекомендацию. Это помогло в решении моей проблемы. - person user1629100; 02.09.2012

Я думаю, что понял, что вы пытаетесь сделать, и вот что вы должны сделать:

1- Создайте 3 новых файла (xib,m,h), назовите их SubView.xib,m,h. Вы должны убедиться, что он наследует UIView.

2- в файле xib нарисуйте элементы подвида и подключите к ним IBOutlets. Но убедитесь, что владельцем файла является ViewController, а тип класса корневого представления — «SubView».

3- Создайте IBOutlet типа Subview в ViewController.

4- откройте SubView.xib и подключите SubView (корневой узел в дереве объектов) с помощью IBOutlet владельца файла, который вы сделали на шаге 3.

чтобы загрузить новый SubView в ViewController.m, просто вызовите эту строку: после этой строки ваш IBOutlet в ViewController будет иметь объект SubView.

[[NSBundle mainBundle] loadNibNamed:@"SubView" owner:self options:nil];

в приведенном выше коде self отражается на ViewController

person Mahmoud Fayez    schedule 28.08.2012
comment
Спасибо за комментарии. Это полезно. - person user1629100; 02.09.2012