Skip to content
This repository was archived by the owner on Nov 9, 2017. It is now read-only.

Commit 8ffbc39

Browse files
author
张国晔
committed
Stop hooking the view
rely entirely on the controller
1 parent 757e839 commit 8ffbc39

File tree

1 file changed

+17
-22
lines changed

1 file changed

+17
-22
lines changed

Tweak.x

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -12,36 +12,32 @@
1212
@property(readonly, nonatomic) NSString *address;
1313
@end
1414

15-
@class CKBalloonView;
16-
1715
@interface CKTranscriptCollectionViewController : UIViewController <MFMailComposeViewControllerDelegate>
18-
- (id<CKMessage>)messageForBalloonView:(CKBalloonView *)view;
16+
- (id<CKMessage>)messageForBalloonView:(id)view;
1917
- (BOOL)shouldShowReportForMessage:(id<CKMessage>)message;
2018
@end
2119

22-
%hook CKBalloonView
20+
%hook CKTranscriptCollectionViewController
2321

24-
- (void)showMenu {
25-
%orig;
26-
NSString *title = @{REPORT_DICT}[[[NSLocale preferredLanguages] objectAtIndex:0]];
27-
if (!title)
28-
title = REPORT_DEFAULT;
29-
UIMenuItem *report = [[UIMenuItem alloc] initWithTitle:title action:@selector(report:)];
30-
NSMutableArray *menuItems = [[UIMenuController sharedMenuController].menuItems mutableCopy];
31-
[menuItems addObject:report];
32-
[UIMenuController sharedMenuController].menuItems = menuItems;
33-
[[UIMenuController sharedMenuController] update];
22+
- (NSArray *)menuItemsForBalloonView:(id)view {
23+
if ([self shouldShowReportForMessage:[self messageForBalloonView:view]]) {
24+
NSMutableArray *menuItems = [%orig(view) mutableCopy];
25+
NSString *title = @{REPORT_DICT}[[[NSLocale preferredLanguages] objectAtIndex:0]];
26+
if (!title)
27+
title = REPORT_DEFAULT;
28+
UIMenuItem *report = [[UIMenuItem alloc] initWithTitle:title action:@selector(report:)];
29+
[menuItems addObject:report];
30+
return menuItems;
31+
} else
32+
return %orig(view);
3433
}
3534

36-
%end
37-
38-
%hook CKTranscriptCollectionViewController
39-
4035
%new
41-
- (void)balloonView:(CKBalloonView *)view report:(id)sender {
36+
- (void)balloonView:(id)view report:(id)sender {
4237
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
4338
id _center = center;
4439
__block id _token = [center addObserverForName:UIMenuControllerDidHideMenuNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notification) {
40+
[_center removeObserver:_token];
4541
UIImage *_UICreateScreenUIImage();
4642
NSData *screenshot = UIImagePNGRepresentation(_UICreateScreenUIImage());
4743
MFMailComposeViewController *mc = [MFMailComposeViewController new];
@@ -55,7 +51,6 @@
5551
[mc setToRecipients:@[@"[email protected]"]];
5652
[mc addAttachmentData:screenshot mimeType:@"image/png" fileName:@"screenshot.png"];
5753
[self presentViewController:mc animated:YES completion:nil];
58-
[_center removeObserver:_token];
5954
}];
6055
}
6156

@@ -64,8 +59,8 @@
6459
return message.isiMessage && !message.isOutgoing;
6560
}
6661

67-
- (BOOL)balloonView:(CKBalloonView *)view canPerformAction:(SEL)action withSender:(id)sender {
68-
return %orig(view, action, sender) || ((action == @selector(balloonView:report:)) && [self shouldShowReportForMessage:[self messageForBalloonView:view]]);
62+
- (BOOL)balloonView:(id)view canPerformAction:(SEL)action withSender:(id)sender {
63+
return %orig(view, action, sender) || (action == @selector(balloonView:report:));
6964
}
7065

7166
%new

0 commit comments

Comments
 (0)