我有一個(NSObject) Block *my_block
作爲屬性UIView *main_view
。在ViewController上,我將UIPanGestureRecognizer
添加到main_view
,因此手勢方法必須位於ViewController上。有沒有辦法通過手勢方法瞭解具體main_view
的my_block
擁有者?從UIView屬性獲取對NSObject父項的引用
這是因爲我有一個NSMutableArray
的Block
。在運行時將Blocks
添加到NSMutableArray
。
我的第一個想法是通過NSMutableArray
循環比較每個main_view
到識別器的UIView
。另一個想法是對UIView
進行分類並創建對其各自的Block
的參考。但也許有一個更乾淨的方式來做到這一點。
下面是我的類和方法的一個簡單示例。
Block.h
#import <Foundation/Foundation.h>
@interface Block : NSObject
@property (nonatomic, strong) UIView *main_view;
@end
ViewController.m
#import "ViewController.h"
#import "Block.h"
@interface ViewController()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// the Blocks are actually added on runtime to a NSMutableArray, but this is a simpler example
Block *my_block = [[Block alloc] init];
[[my_block main_view] addGestureRecognizer:[[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)]];
[self.view addSubview:[my_block main_view]];
}
- (void)handlePan:(UIPanGestureRecognizer *)recognizer
{
Block *block_temp = [recognizer.view ....];
//recognizer.view = main_view, how to get the Block owner of this view?
}
爲什麼塊不能認爲自己?我的意思是,Block:UIView?然後,您將手勢添加到塊而不是main_view。 –
從您的問題「手勢方法必須在ViewController上」 - 爲什麼會出現這種情況? – Rich
@RaphaelOliveira因爲在代碼的另一部分我需要它是這樣的。 –