私のiOSアプリには、メインビューを処理するビューコントローラーが1つあります。そのビューにボタンがある場合、モーダルテーブルビューを開いて、ユーザーがテーブルから行を選択でき、メインビューのラベルが選択した行テキストと等しくなるようにすることはできますか?
質問する
187 次
3 に答える
1
このようにしてください
テーブルビューをurviewコントローラーに追加し、オブジェクトをテーブルビューに作成します。
その後、このようにします
- (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
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 に答える
0
確かに、それは可能です。メソッドpresentViewController:animated:completion:を使用して、モーダルテーブルビューコントローラーを表示できます。メインビューコントローラーには、そのコントローラー(提示しているコントローラー)へのアクセスを提供するプロパティpresentedViewControllerがあり、そのプロパティの1つ(選択した行のテキストに設定されます)の値を取得できます。
編集後:
あなたはこのようにそれを行うことができます。現在のViewControllerには、次のものがあります。
initメソッド(またはviewDidLoad)で、次の行で通知を受信するように登録します。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dismissAndUpdate:) name:@"ItemSelectedNotification" object:nil];
次に、これらの2つの方法:
-(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 に答える