1

ViewController には、テーブル ビュー、1 つのボタン、およびラベルがあります。私の仕事: 任意の行を選択してボタンを押すと、選択した行のテキストがラベルに表示されます。何をどのようにすればよいですか?

私はすでにおなじみのコードを実行しました:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{
    UIAlertView *messageAlert = [[UIAlertView alloc]
                                    initWithTitle:@"Row Selected" message:@"You've selected a row" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];`

    [messageAlert show];

}

その場合、任意の行を選択するとすぐに警告メッセージが表示されます。

どうもありがとう。

4

1 に答える 1

2

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPathの戻り値を取得し、[[[tableView cellForRowAtIndexPath:indexPath] textLabel] text]プロパティに格納します。したがって、ユーザーが選択したセルを変更するたびに、プロパティは現在選択されているセルのテキストに更新されます。次に、ボタンのメソッドを作成して配線します。ボタンが押されたら、インターフェイスのラベルのテキスト値をプロパティに設定します。


上部のセクション(.hファイルにあります)の中@interfaceに、これを置きます。

@property (nonatomic, copy) NSString* selectedCellText;

セクション内@implementation(.m / .mmファイルにあります)にこれを配置します。

@synthesize selectedCellText = _selectedCellText;

これで、2つのメソッドを使用してアクセスできるインスタンス変数_selectedCellTextができました。これはプロパティと呼ばれます。[self setSelectedCellText](「セッター」)を使用して設定し、 [self selectedCellText](「ゲッター」)を使用して値を取得します。または、ドット表記を使用すると、これが自動的に行われます(self.selectedCellText常に参照してください)。もちろん、self内部でのみ使用できます。別のオブジェクトにこのインスタンスへのポインタがある場合は、の代わりにそれを使用しますself

について- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPathは、これを行います。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    self.selectedCellText = [[[tableView cellForRowAtIndexPath:indexPath] textLabel] text];
}

これで、いつでも(テーブルを適切に設定していれば)self.selectedCellText、現在選択されているセルのテキストが含まれます。したがって、UILabelとUIButtonを接続し、ボタンがターゲットアクションを介してメソッドを呼び出すようにします。ペン先/ストーリーボードを使用している場合は、それらをインターフェイスにドラッグします。ctrl-アシスタントエディタでラベルからインターフェイスセクションにドラッグすると、Xcodeでアウトレットを作成するように求められます。この新しいプロパティに名前を付けましょうmyLabel。ctrl-ボタンから実装セクションにドラッグし、ボタンがタッチされたときに呼び出されるメソッドをXcodeに作成させます。labelTextUpdate名前を付けて、に設定argumentsしましょうnone。Xcodeがメソッドを作成するので、このコードをその中に挿入します。

self.myLabel.text = self.selectedCellText;

完了です。ユーザーがテーブルに触れるたびに、プロパティはセルに含まれているラベルのテキストに更新されます。ユーザーがボタンに触れるlabeltextUpdateと、呼び出され、ユーザーインターフェイスのラベルがプロパティのテキストに更新されます。これは、以前に選択したセルに含まれていたテキストになります。

もちろん、これは私が何も忘れなかったことを提供しています。なぜならこれは記憶からのものだからです。Objective-CおよびiOS/Mac OSの開発に関する本をいくつでも読んだり、Appleのドキュメントを読んだりすることをお勧めします。


私はそれをテストしました、そしてそれは働きます。結果は次のとおりです。

UITableViewの使用例

また、textプロパティやdelegateメソッドを使用せずに、これを行うためのより良い方法があることにも気づきましたdidSelectRowAtIndexPath。ボタン方式では、テーブルビューにクエリを実行して、現在選択されているセルを取得し、そのラベルを要求してから、そのテキストを取得してラベルに適用します。1行か2行のコードしか必要とせず、混乱がはるかに少なくなります。

于 2012-10-28T16:02:53.080 に答える