UIActionSheet减少在控制器再写一次代理

利用 CFRunLoopRun 和 CFRunLoopStop 方法来将 UIActionSheet 改造成同步的调用。

#import <Foundation/Foundation.h>

#import <UIKit/UIKit.h>

@interface SynchronizedUIActionSheet : NSObject

- (NSInteger)showInView:(UIView *)view;

@end

//

//  SynchronizedUIActionSheet.m

//  SynchronizedUIActionSheet

//

//  Created by Evan on 16/6/29.

//  Copyright © 2016年 Evan. All rights reserved.

//

#import "SynchronizedUIActionSheet.h"

@interface SynchronizedUIActionSheet ()<UIActionSheetDelegate>

@property (nonatomic, strong) UIActionSheet *actionSheet;

@property (nonatomic, assign) NSInteger selectedIndex;

@end

@implementation SynchronizedUIActionSheet

- (NSInteger)showInView:(UIView *)view

{

      _actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:@"111" otherButtonTitles:nil, nil];

    [_actionSheet showInView:view];

    CFRunLoopRun();

    return _selectedIndex;

}

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

    _selectedIndex = buttonIndex;

    _actionSheet = nil;

    CFRunLoopStop(CFRunLoopGetCurrent());

}

@end

原文地址:https://www.cnblogs.com/happyEveryData/p/5629767.html