我的申请仅仅是为了学习更客观的目标。此应用程序基本上将用户带到模态视图,然后为用户提供单击选项(uibuttons)。当用户点击按钮时,模态视图被取消,我想从该按钮获取数据(无论是按钮,标签等的标题,无论哪种最容易使用)并将其存储为变量我的主要观点。我尝试使用在单独的.h文件中定义的extern NSString,但没有运气。我错过了什么?
答案 0 :(得分:1)
使用授权。制定协议。
@protocol SelectValueDelegate <NSObject>
@optional
- (void) selectedValue:(NSString * )values selectionViewController:(UIViewController *)controller;
- (void)selectionCanceled:(UIViewController *)controller;
@end
在MainViewController.h
@interface MainViewController : UIViewController<SelectValueDelegate> {
//....
}
和.m
文件如下所示:
- (void) selectedValue:(NSString * )values selectionViewController:(UIViewController *)controller
{
//here you have value.
[controller dissmissModalViewControllerAnimated:YES];
}
- (void)selectionCanceled:(UIViewController *)controller
{
[controller dissmissModalViewControllerAnimated:YES];
}
并在你ModalViewController
中创建委托的属性,如下所示:
@interface ModalViewController : UIViewController
id<SelectValueDelegate> delegate;
}
@property(assign)id delegate; // synthesize it also
现在单击按钮执行以下操作:
-(IBAction)buttonClicked:(id)sender
{
[delegate selectedValue:@"Value" selectionViewController:self];
}
并且在MainViewController
内以模态方式呈现时,请执行以下操作:
ModalViewController *screen = [[ModalViewController alloc] initWithBlahblah];
screen.delegate = self;
[self.navigationController presentModalViewControllerAnimated:YES];
答案 1 :(得分:0)
答案 2 :(得分:0)
您必须使用委托方法传递值,请参阅Apple文档
答案 3 :(得分:0)
您可以将数据存储在appDelegate中的对象中,该对象是应用程序的Delegate文件,
您可以在appDelegate中声明一个对象:
NSString *buttonName;
然后对该对象进行特性化和合成。
执行此操作后,将代码放入您打开的视图控制器中作为模态VIew:
appDelegate.buttonName = yourbutton.titleLabel.text;
现在即使在取消模态视图后,您也会将按钮的标题存储在appldelegate的对象中,您可以从应用程序的任何位置访问它。
答案 4 :(得分:0)
假设您有两个视图控制器说 A &amp;的乙强>
你的A.h
{
NSString *strData;
int cId;
}
@property (nonatomic, retain) NSString *strData;
@property (readwrite) int cId;
现在在你的A.m
@synthesize strData,cId;
你的B.h
@class A
{
A *aObj;
}
现在在你的B.m
#import "A.h"
- (void) viewDidLoad
{
aObj=[A alloc] init]; //alloc object of A
[aObj setCId:10]; //set value for cId
[aObj setStrData:@"Hello from B"]; //set value for strData
//do what ever
[aObj release]; //don't forget
}