2

委任のチュートリアルを広範囲に検索しましたが、機能させることができませんでした。これがストーリーとコードです。DetailViewController には、UITextField と UIButton があります。ボタンを押すと、単純なセクション テーブルを持つ別の PricelistViewController に移動します。そのテーブルの行をタップすると、行のタイトルから最初のビューにテキストが返され、テキスト フィールドに挿入されます。しかし、そうではありません。コードは次のとおりです。

PricelistViewController.h (2 番目のビュー):

@class PricelistViewController;

@protocol PricelistViewControllerDelegate <NSObject>
@required
//- (void)theSaveButtonOnThePriceListWasTapped:(PricelistViewController *)controller didUpdateValue:(NSString *)value;
- (void)theSaveButtonOnThePriceListWasTapped:(NSString *)value;
@end



@interface PricelistViewController : UITableViewController

@property (nonatomic, weak) id <PricelistViewControllerDelegate> delegate;

@property (retain, nonatomic) NSMutableArray * listOfSections;

@end

PricelistViewController.m

@synthesize delegate;


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

    NSDictionary *dictionary = [listOfSections objectAtIndex:indexPath.section];
    NSArray *array = [dictionary objectForKey:@"ProductSections"];
    NSString *selectedProduct = [array objectAtIndex:indexPath.row];

    [self.delegate theSaveButtonOnThePriceListWasTapped:[NSString stringWithFormat:@"%@", selectedProduct]];

    [self.navigationController popViewControllerAnimated:YES];

}

これは、DetailViewController.h (テキスト フィールドとボタンを含む最初のビュー)のコードです。

#import "PricelistViewController.h"

@interface DetailViewController : UIViewController <UITextFieldDelegate, PricelistViewControllerDelegate>

DetailViewController.m (これは、フィールド内のテキストを変更しようとしている方法です):

- (void)theSaveButtonOnThePriceListWasTapped:(NSString *)value
{
    NSLog(@"Text, sent here: %@", value);
    NSLog(@"Text was sent here.");
    self.detailDescriptionLabel.text = value;

}

detailDescriptionLabelは、表示するテキストの UITextField です。

誰かがコードをチェックして助けてくれますか? 私は運が悪い2日間、この問題に取り組んでいます!

4

2 に答える 2

0

まず、PriceListViewController のヘッダー ファイルでクラスを前方参照 (@class) するのはなぜですか? これは必要ありません。

次に、ARC を使用していますか。配列プロパティのタイプが非アトミックで強力である場合。デリゲートでない場合は、プロパティを非アトミックにする必要があります。用語を混同しているようです

また、配列をどこでどのように初期化していますか?

于 2012-10-19T09:40:34.613 に答える
0

私はそれを考え出した。PricelistViewController.m で、メソッドを呼び出す方法を変更しました (If ステートメントを追加)。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSDictionary *dictionary = [listOfSections objectAtIndex:indexPath.section];
    NSArray *array = [dictionary objectForKey:@"ProductSections"];
    NSString *selectedProduct = [array objectAtIndex:indexPath.row];

    if (delegatePrice && [delegatePrice respondsToSelector:@selector(theSaveButtonOnThePriceListWasTapped:didUpdateValue:)])
    {
        [delegatePrice theSaveButtonOnThePriceListWasTapped:self didUpdateValue:selectedProduct];
    }

そして最も重要なこと: Storyboard の使用を拒否し、代わりに、PricelistViewController ビュー用に古い適切な .xib ファイルを作成したところ、すぐに機能しました!

于 2012-10-19T20:28:36.483 に答える