0

だからここで何が起こっているのか(私が初心者であることを除いて)。

AddAPlaceViewControllerとshowCategoriesViewControllerの2つのビューコントローラーがあります。

AddAPlaceVCにテーブルセルがあり、これをタップすると、showCategoriesVC(テーブルビューコントローラー)が開き(モーダル)、10個のオプションのリストが表示されます。それらの1つをタップするか、キャンセルボタンをタップします。

私はプロトコルとデリゲートを理解し、理解するのに何日も費やしました。私はそれらを正しく設定していると思いますが、なぜそれらが機能していないか、呼び出されていないのか理解できません。私はあらゆる種類の変更を試みましたが、今のところ運がありません。

あなたたちは私の唯一の希望です!:)

コードの重要な部分は次のとおりです。

AddAPlaceViewController.h

AddAPlaceViewController.h

#import <UIKit/UIKit.h>
#import "showCategoriesViewController.h"


@interface AddAPlaceViewController : UIViewController <UITextViewDelegate, UITextFieldDelegate, UINavigationControllerDelegate, UIImagePickerControllerDelegate, UIActionSheetDelegate, UITableViewDataSource, UITableViewDelegate, ShowCategoriesViewControllerDelegate>

AddAPlaceViewController.m

AddAPlaceViewController.m

#import "AddAPlaceViewController.h"
#import "FSQVenue.h"
#import "Categories.h"
//#import "showCategoriesViewController.h"
#import <QuartzCore/QuartzCore.h>

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

    // Un-highlight the selected cell

    [categoryTable deselectRowAtIndexPath:indexPath animated:YES];


    showCategoriesViewController *SCVC = [[showCategoriesViewController alloc] init];



    SCVC = [self.storyboard instantiateViewControllerWithIdentifier:@"showCategories"];

    SCVC.categoryDelegate = self;

    [self.navigationController presentModalViewController:SCVC animated:YES];


}

#pragma mark showCategoriesViewControllerDelegate

-(void)didSelectOptions:(NSInteger )selectedCategory
{
    NSInteger category = selectedCategory;

    NSLog(@"Add Places %d", category);

    [self dismissModalViewControllerAnimated:YES];
}

-(void)didCancelOptions
{
    NSLog(@"Add Places -- Dismiss Button Pressed");

    [self dismissModalViewControllerAnimated:YES];
}

showCategoriesViewController.h

showCategoriesViewController.h

#import <UIKit/UIKit.h>

@protocol ShowCategoriesViewControllerDelegate;


@interface showCategoriesViewController : UITableViewController
{
     id<ShowCategoriesViewControllerDelegate>categoryDelegate;
}

@property (nonatomic, weak) id<ShowCategoriesViewControllerDelegate> categoryDelegate;

- (IBAction)cancelButton:(id)sender;

@end

@protocol ShowCategoriesViewControllerDelegate <NSObject>

- (void)didSelectOptions:(NSInteger )selectedCategory;
- (void)didCancelOptions;


@end

showCategoriesViewController.m

showCategoriesViewController.m

#import "showCategoriesViewController.h"
#import "Categories.h"


@interface showCategoriesViewController ()

@property (strong, nonatomic) NSArray *categoryArray;

@end

@implementation showCategoriesViewController

@synthesize categoryDelegate = _categoryDelegate;

@synthesize categoryArray;


…

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

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    [_categoryDelegate didSelectOptions:indexPath.row];
    NSLog(@"Selected IndeXPath %@", cell);
    NSLog(@"Selected IndeXPath GOING TO DELEGATE %d", indexPath.row);


}


- (IBAction)cancelButton:(id)sender {

    [_categoryDelegate didCancelOptions];
    NSLog(@"Button Pressed");

}
4

2 に答える 2

0

presentModalViewController: SCVCがあるため、AddAPlaceViewControllerは非アクティブです。カスタム デリゲート メソッドを使用して、UITableView のサブクラスとして showCategoriesViewController を作成できる場合は、より良い方法です。

参照リンク

于 2012-10-11T03:48:00.290 に答える
0

おそらく推測しますか?投稿したコードでは、プロパティと ivar の両方が と呼ばれcategoryDelegateていますが、プロパティは と呼ばれる ivar を参照しているかのように扱います_categoryDelegate。おそらくこれは単なるタイプミスですが、iOS では null オブジェクトに対するメソッドの呼び出しが許可されているため (そして何も実行されないため)、何も表示されずに失敗します。ivar の名前を に変更すると、_categoryDelegate修正されるはずです。

于 2012-10-11T03:40:04.173 に答える