0

在我的 iOS 应用程序中,我有一个视图控制器来处理我的主视图。如果我在该视图上有一个按钮,我可以让它打开一个模式表视图,以便用户可以从表中选择一行,然后主视图上的标签等于所选行文本?

4

3 回答 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 回答