0

いくつかの静的セルを含む UITableView があります。そのうちの 1 つは、タッチすると UIActionSheet を表示します。そのコードは次のとおりです。

viewDidLoad: コントロールを初期化します。

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self initializeControls];
}

initializeControls: UIActionSheet を表示するために、セル内のラベルにジェスチャ認識エンジンを追加します。

- (void)initializeControls {
    [...]

    // Places Label
    self.placeNamesLabel.userInteractionEnabled = YES;
    tapGesture = \
    [[UITapGestureRecognizer alloc]
     initWithTarget:self action:@selector(didPlaceNamesLabelWithGesture:)];
    [self.placeNamesLabel addGestureRecognizer:tapGesture];
    tapGesture = nil;

    [...]
}

didPlaceNamesLabelWithGesture: UIActionSheet を初期化し、StoryBoard から UITableView を追加し、閉じるボタンを追加します。

- (void)didPlaceNamesLabelWithGesture:(UITapGestureRecognizer *)tapGesture
{
    // Show UITableView in UIActionView for selecting Place objects.
    placesActionSheet = [[UIActionSheet alloc] initWithTitle:nil
                                                      delegate:nil
                                             cancelButtonTitle:nil
                                        destructiveButtonTitle:nil
                                             otherButtonTitles:nil];

    [placesActionSheet setActionSheetStyle:UIActionSheetStyleBlackTranslucent];

    CGRect tableFrame = CGRectMake(0, 40, 0, 0);

    UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    AddArticlesPlacesViewController *placesView = [storyBoard instantiateViewControllerWithIdentifier:@"PlacesForArticle"];
    placesView.managedObjectContext = self.managedObjectContext;
    placesView.view.frame = tableFrame;
    [placesActionSheet addSubview:placesView.view];
    placesView = nil;

    UISegmentedControl *closeButton = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObject:@"Close"]];
    closeButton.momentary = YES;
    closeButton.frame = CGRectMake(260, 7.0f, 50.0f, 30.0f);
    closeButton.segmentedControlStyle = UISegmentedControlStyleBar;
    closeButton.tintColor = [UIColor blackColor];
    [closeButton addTarget:self action:@selector(dismissPlacesActionSheet:) forControlEvents:UIControlEventValueChanged];
    [placesActionSheet addSubview:closeButton];
    closeButton = nil;

    [placesActionSheet showInView:[[UIApplication sharedApplication] keyWindow]];

    [placesActionSheet setBounds:CGRectMake(0, 0, 320, 485)];
}

disconnectPlacesActionSheet: UIActionSheet を閉じます。

-(void)dismissPlacesActionSheet:(id)sender {
    [placesActionSheet dismissWithClickedButtonIndex:0 animated:YES]; }

すべてが機能し、UITableView は Core Data から正常に読み込まれます。では、どこに問題があるのでしょうか。ポイントは、任意の行がタップされると、テーブル全体が空になることです (まだ画像を投稿できません、申し訳ありません)。

AddArticlesPlacesViewController へのプッシュ セグエを起動するボタンを使用して、新しいカスタム行を追加しようとしました。これは正常に機能し、動作は期待どおりです。したがって、問題は UIActionSheet と UITableView の間にあります。

両方のビュー コントローラーのインターフェイスは次のとおりです。

主要。

@interface AddArticleViewController : UITableViewController <NSFetchedResultsControllerDelegate, [...]>

[...]

@property (weak, nonatomic) IBOutlet UILabel *placeNamesLabel;

@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;

[...]

@end

セカンダリ。

@interface AddArticlesPlacesViewController : UITableViewController <NSFetchedResultsControllerDelegate>

@property (strong, nonatomic) NSFetchedResultsController *fetchedResultsController;
@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;

@end

私は立ち往生しています。私は何を間違っていますか?

よろしく。

ペドロ・ベンチュラ

4

1 に答える 1

0

tableview のデリゲート メソッドを使用できます。

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

        NSLog(@"indexpath-->%d",indexPath.row);
        if (indexPath.row==0 || indexPath.row == 2 ) 
        {

            NSLog(@"row %d",indexPath.row);

        }

        if (indexPath.row==1)
     {

            actionsheet=[[UIActionSheet alloc]initWithTitle:@"Sample" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:nil, nil];
               [actionsheet showInView:self.view];

        }
    }

また、選択したボタンに UIActionsheetDelegate のメソッドを使用できます。

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
    {

         NSLog(@"index==>%d",buttonIndex);
           NSLog(@"cancel");
    }
于 2013-05-28T12:18:56.297 に答える