2017-02-22 40 views
1

Я хочу показать UIAlertController из ячейки UICollectionView.UIAlertController от UICollectionViewCell

UIAlertController *alert = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet]; 
UIAlertAction *deleteAction = [UIAlertAction actionWithTitle:@"Delete" style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action) { 

}]; 
UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) { 

}]; 
[alert addAction:deleteAction]; 
[alert addAction:cancelAction]; 
[self presentViewController:alert animated:YES completion:nil]; 

Проблема заключается в том, что клетка не имеет [собственный presentViewController: предупреждение анимированное: ДА завершение: ноль]; метод.

Может быть, кто-то может мне помочь?

ответ

0

Вы можете использовать делегат

CollectionCell.h

#import <UIKit/UIKit.h> 

@class CollectionCell; 

@protocol CollectionCellDelegate 

- (void)showDataFromCell:(CollectionCell *)cell; 

@end 


@interface CollectionCell : UICollectionViewCell 

+ (NSString *)cellIdentifier; 

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

@end 

CollectionCell.m

#import "CollectionCell.h" 

@implementation CollectionCell 

+ (NSString *)cellIdentifier { 
    return @"CollectionCell"; 
} 


- (IBAction)buttonPressed:(UIButton *)sender { 

    [self.delegate showDataFromCell:self]; 
} 

@end 

ViewController.m

#import "ViewController.h" 

#import "CollectionCell.h" 

@interface ViewController() <CollectionCellDelegate> 

@property (weak, nonatomic) IBOutlet UICollectionView *collectionView; 

@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
} 


#pragma mark - UITableView DataSource - 

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { 
    return 10; 
} 

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { 

    CollectionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:[CollectionCell cellIdentifier] forIndexPath:indexPath]; 
    cell.delegate = self; 
    return cell; 
} 

- (void)showDataFromCell:(CollectionCell *)cell { 

    NSIndexPath *indexPath = [self.collectionView indexPathForCell:cell]; 

    NSLog(@"Button pressed at cell with index: %ld", (long)indexPath.row); 
} 


@end 
+0

Решение Theis с делегатом прекрасно работает, но есть еще один хороший способ сделать это. [self.window.rootViewController presentViewController: alert animated: YES завершение: nil]; Оба выполняют свою работу. – ViceBrot

1

Вы можете создать метод в вашем viewController, который будет содержать ваш просмотр коллекции и вызвать метод из вашей ячейки. Что-то вроде этого:

- (void)presentAlert { 
    UIAlertController *alert = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet]; 
    UIAlertAction *deleteAction = [UIAlertAction actionWithTitle:@"Delete" style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action) { 

    }]; 
    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) { 
    }]; 
    [alert addAction:deleteAction]; 
    [alert addAction:cancelAction]; 
    [self presentViewController:alert animated:YES completion:nil]; 
} 

И затем вызвать метод [self presentAlert] где бы вы хотели т.е. ваш didSelectItemAtIndexPath

+0

Определенно лучше сделать это, чем пытаться создавать новый экземпляр уведомления контроллера для каждой ячейки, которая запускает его. – brandonscript

 Смежные вопросы

  • Нет связанных вопросов^_^