0

iPhoneの設定アプリに似たアプリを開発しています。

私の最初の VC では、2 番目の VC にかかる選択時に 4 つの行があります。私の 2 番目の VC はアイテムのリストを表示します。ユーザーが選択すると、選択したテキストは、選択したテキストに隣接する最初の VC に表示されます。辞書オブジェクトまたは他の方法を使用してそれを達成する方法.!よろしくお願いします...

4

3 に答える 3

2

私は数日前に同様のタスクを実行しましたが、これがどのようにそれを達成したかです。あなたが望むものを達成するための多くの選択肢があるかもしれないことに注意してください。

KeyPoint: UITableView は、セルに表示されるデータ、およびセクションごとのセクションと行の数について、その DataSource (配列またはディクショナリ) に依存しています。

ここで、最初に DataSource にデフォルトとして表示される値があります。行をタップしたら、2ndViewController を初期化してナビゲーション スタックにプッシュします。この 2ndViewController では、何らかの方法で 1stViewController の DataSource を更新する必要があります (元の値を置き換えます)。

アプローチ1

プロトコルとデリゲートを使用できます

次のようにプロトコルを作成します。

@protocol MyTableDelegate 
- (void) dismissWithData:(NSString*)data;

2ndViewController でデリゲート参照を作成し、そのデリゲート メソッドを呼び出して、選択したデータを渡します

@interface 2ndViewController : UIViewController
@property (assign) id<MyTableDelegate> delegate;
@property (assign) NSIndexPath *ip;
// Also synthesize it

@implementation 2ndViewController
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    [self.delegate dismissWithData:@"Second Table Selection"];
    [self.navigationController popViewControllerAnimated:YES];
}

1stViewController で、TableView & Protocol メソッドを実装します。

@interface 1stViewController : UIViewController <MyTableDelegate>

@implementation 1stViewController

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    2ndViewController *controller = [[2ndViewController alloc] initWithNib....];
    // Set the Delegate to Self
    controller.delegate = self;
    self.ip = indexPath;
    // Push Controller on to Navigation Stack
}

- (void) dismissWithData: (NSString*) data
{
     // We Will Store NSIndexPath ip in didSelectRowAtIndex method
     // Use the ip to get the Appropriate index of DataSource Array
     // And replace it with incoming data         // Reload TableView
     [self.dataSource replaceObjectAtIndex:[ip row] withObject:data];
     [self.tableView reloadData];
}

アプローチ 2

didSelectRowAtIndexPath メソッドでデータ ソースを 2ndViewController に渡すこともできます。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    2ndViewController *controller = [[2ndViewController alloc] initWithNib....];
    controller.dataArray = self.dataSource;
    // Push Controller on to Stack
}

次に、2ndViewController の同じ didSelectRowAtIndexPath メソッドで、データ ソースを更新し、

[self.navigationController popViewControllerAnimated:YES];

また、1stController の ViewWillAppear メソッドでテーブルビューをリロードする必要があります

- (void)ViewWillAppear:(BOOL)animated
{
     [self.tableView reloadData];
     [super ViewWillAppear:animated];
}
于 2012-06-21T06:23:51.713 に答える
1

viewDidAppear で [self.tableView reloadData] を呼び出す必要があると思います。可能であれば、このリンクにアクセスしてください。戻るときに UITableView をリロードしますか?

于 2012-06-20T06:00:04.267 に答える
1

最初の VC で使用しているアレイ。その配列を 2 番目の VC に渡し、2 番目の VC クラスでそれを更新し、このステートメント「[firstVC.tableView reloadData]」を firstVC クラスの viewWillAppear メソッドに記述します。

これにより、ユーザーが secondVC クラスで何かを選択すると、firstVC クラスの firstVC クラスの配列が更新されます。更新配列がテーブル ビューに反映されるようにします。

于 2012-06-20T06:05:44.360 に答える