在我的 iOS 应用程序中,我有一个视图控制器来处理我的主视图。如果我在该视图上有一个按钮,我可以让它打开一个模式表视图,以便用户可以从表中选择一行,然后主视图上的标签等于所选行文本?
问问题
187 次
3 回答
1
就这样做
向您的视图控制器添加一个表格视图,为表格视图创建一个对象。
然后在这样做之后
- (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;
}
我想可能对你有用
于 2012-08-14T06:00:08.583 回答
0
当然,这是可能的。您可以使用方法 presentViewController:animated:completion: 来呈现模态表视图控制器。主视图控制器有一个属性,presentedViewController,它使您可以访问该控制器(您正在呈现的那个),因此您可以获得其属性之一的值(将设置为所选行的文本)。
编辑后:
你可以这样做。在呈现视图控制器中有这个:
在 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];
}
于 2012-08-14T05:36:29.933 回答
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 ..
}
于 2012-08-14T05:46:17.080 回答