在我的iOS应用程序中,我有一个视图控制器来处理我的主视图。如果我在该视图上有一个按钮,我可以打开一个模态表视图,这样用户可以从表中选择一行,然后主视图上的标签等于所选的行文本吗?
答案 0 :(得分:1)
就这样做
向您的视图控制器添加一个tableview,创建一个到表视图的对象。
然后这样做
- (void)viewDidLoad
{
[super viewDidLoad];
tableViewObj.hidden = YES;
array = [[NSArray alloc]initWithObjects:@"label1",@"label2",@"label3",@"label4", nil];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
displayText.text = [array objectAtIndex:indexPath.row];
tableViewObj.hidden = YES;
}
-(IBAction)gotoBack:(id)sender
{
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.75];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:tableViewObj cache:YES];
[UIView commitAnimations];
tableViewObj.hidden = NO;
}
我想可能对你有用
答案 1 :(得分:0)
当然,这是可能的。您可以使用presentViewController:animated:completion:方法来呈现模态表视图控制器。主视图控制器有一个属性,presentsViewController,它允许您访问该控制器(您正在呈现的那个),因此您可以获取其中一个属性的值(将设置为所选行的文本)。 / p>
编辑后:
你可以这样做。在呈现视图中,控制器具有:
在init方法(或viewDidLoad)中注册以接收此行的通知:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dismissAndUpdate:) name:@"ItemSelectedNotification" object:nil];
然后是这两种方法:
-(IBAction)buttonClick:(id)sender {
RDTableViewController *tvc = [[RDTableViewController alloc] initWithStyle:UITableViewStylePlain];
[self presentViewController:tvc animated:YES completion:nil];
}
-(void)dismissAndUpdate:(NSNotification *) aNotification {
self.label.text = [aNotification.userInfo valueForKey:@"selectedText"];
[self dismissModalViewControllerAnimated:YES];
}
这是一个可以在表视图控制器子类中完成的示例:
@implementation RDTableViewController
- (id)initWithStyle:(UITableViewStyle)style {
if (self = [super initWithStyle:style]) {
self.theData = @[@"one",@"two",@"three",@"foour",@"five",@"six"];
}
return self;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.theData.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellIdentifier = @"NewCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"NewCell"];
}
cell.textLabel.text = [self.theData objectAtIndex:indexPath.row] ;
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSDictionary *dict = [NSDictionary dictionaryWithObject:[self.theData objectAtIndex:indexPath.row] forKey:@"selectedText"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"ItemSelectedNotification" object:self userInfo:dict];
}
答案 2 :(得分:0)
You can handle those values by using UITableViewDelegate methods . By getting the selectedIndex path value set the text to Button.<br/>
#import <UIKit/UIKit.h>
@interface MainView : UIViewController
{
IBOutlet UIButton *mainButton;
}
@property(nonatomic,retain)IBOutlet UIButton *mainButton;
//in MainView.m file
@synthesize mainButton;
//in CustomViewController.h file
#import "MainView.h"
#import <UIKit/UIKit.h>
@interface CustomViewController :UIViewController<UITableViewDelegate,UITableViewDataSource> {
IBOutlet UITableView *tableList;
}
//in .m file
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
//Pass the indexPath.row to mainView
if (indexPath.row==0) {
MainView *mainV = [[MainView alloc]initWithNibName:@"MainView" bundle:nil];
mainV.mainButton.text=@"setMainButtonText";
[self.navigationController pushViewController:mainV animated:YES];
}
///By using indexPath you can set that value ..
}