我是iPhone编程的新手。我正在尝试从一个视图控制器向另一个视图控制器发送消息。想法是viewControllerA从用户获取信息并将其发送到viewControllerB。然后viewControllerB应该在标签中显示信息。
viewControllerA.h
#import <UIKit/UIKit.h>
@interface viewControllerA : UIViewController
{
int num;
}
-(IBAction)do;
@end
viewControllerA.m
#import "viewControllerA.h"
#import "viewControllerB.h"
@implementation viewControllerA
- (IBAction)do {
//initializing int for example
num = 2;
viewControllerB *viewB = [[viewControllerB alloc] init];
[viewB display:num];
[viewB release];
//viewA is presented as a ModalViewController, so it dismisses itself to return to the
//original view, i know it is not efficient
[self dismissModalViewControllerAnimated:YES];
}
- (void)dealloc {
[super dealloc];
}
@end
viewControllerB.h
#import <UIKit/UIKit.h>
@interface viewControllerB : UIViewController
{
IBOutlet UILabel *label;
}
- (IBAction)openA;
- (void)display:(NSInteger)myNum;
@end
viewControllerB.m
#import "viewControllerB.h"
#import "viewControllerA.h"
@implementation viewControllerB
- (IBAction)openA {
//presents viewControllerA when a button is pressed
viewControllerA *viewA = [[viewControllerA alloc] init];
[self presentModalViewController:viewA animated:YES];
}
- (void)display:(NSInteger)myNum {
NSLog(@"YES");
[label setText:[NSString stringWithFormat:@"%d", myNum]];
}
@end
成功记录YES,但标签的文本不会更改。我已经确定了 我在Interface Builder中的所有连接都是正确的,实际上还有其他(IBAction) 我的程序中的方法更改了这个标签的文本,所有其他方法都完美地工作......
任何想法,伙计们?你不需要给我一个完整的解决方案,任何信息都会有所帮助。感谢。
答案 0 :(得分:1)
使用
viewControllerB *viewB = [[viewControllerB alloc] init];
您正在实例化新的viewControllerB
。这不是你在nib文件中拥有的viewControllerB
(我猜)。你应该为它做一个出口并连接它。
否则,可能使用来自nib的[... initWithNibName:]
实例化它,而不仅仅是[... init]
,然后(以任何一种方式)使用[self.navigationController pushViewController:viewB animated:YES]
推送实例化的视图控制器,或者以模态方式呈现它因为你似乎已经掌握了。
作为旁注,可能将viewcontroller变量命名为viewConB
,因为视图和视图控制器之间存在明显且重要的区别。此外,类名往往以大写字母开头,变量以小写字母开头,以保持清晰。