利用 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