新人请教如何在一个view的outletcollection中返回某一个view的index viewoutletcollectionindex 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 把self.playingCardView和sender打印出来,看连接或者触发swipe方法的对象对不对 您好!我打印出来之后是这样的Printing description of self->_playingCardView:<__NSArrayI 0x8c96b80>(<PlayingCardView: 0x8c8a4e0; frame = (0 0; 80 116); opaque = NO; autoresize = W+H; layer = <CALayer: 0x8c755a0>>,<PlayingCardView: 0x8c92bc0; frame = (120 20; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8c96b50>; layer = <CALayer: 0x8c7e120>>,<PlayingCardView: 0x8c7a2a0; frame = (220 20; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8c96900>; layer = <CALayer: 0x8c768c0>>,<PlayingCardView: 0x8c8e6a0; frame = (20 159; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8c96a80>; layer = <CALayer: 0x8c8ac90>>,<PlayingCardView: 0x8c95610; frame = (120 159; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8c95840>; layer = <CALayer: 0x8c95720>>,<PlayingCardView: 0x8c93640; frame = (220 159; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8c96ac0>; layer = <CALayer: 0x8c8bc90>>,<PlayingCardView: 0x8c769d0; frame = (20 295; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8c968e0>; layer = <CALayer: 0x8c95580>>,<PlayingCardView: 0x8c93360; frame = (120 295; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8c96ae0>; layer = <CALayer: 0x8c8e800>>,<PlayingCardView: 0x8c8a860; frame = (220 295; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8c96aa0>; layer = <CALayer: 0x8c8a7c0>>,<PlayingCardView: 0x8c7ebf0; frame = (20 432; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8c96b00>; layer = <CALayer: 0x8c8d4e0>>,<PlayingCardView: 0x8c95ca0; frame = (120 432; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8c95700>; layer = <CALayer: 0x8c95ef0>>,<PlayingCardView: 0x8c8cac0; frame = (220 432; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8c96b20>; layer = <CALayer: 0x8c89a40>>)Printing description of sender:<UISwipeGestureRecognizer: 0x8c92c40; state = Ended; view = <PlayingCardView 0x8c92bc0>; target= <(action=swipe:, target=<ViewController 0x8c92f60>)>; direction = right>应该怎么解决呢?新手没学过debug,谢谢解答 首先你的outletcollection连接的是正确的。另外我看到你是把手势识别器增加到每一个view上的,这时swipe的sender是被识别的手势识别器,而不是sender,你的代码这样改就行了:- (IBAction)swipe:(UISwipeGestureRecognizer *)sender { NSUInteger chooseViewIndex = [self.playingCardView indexOfObject:sender.view]; [self.game chooseCardAtIndex:chooseViewIndex]; Printing description of self->_playingCardView:<__NSArrayI 0x8d9b390>(<PlayingCardView: 0x8d7b4f0; frame = (0 0; 80 116); opaque = NO; autoresize = W+H; layer = <CALayer: 0x8d75650>>,<PlayingCardView: 0x8d99ad0; frame = (120 20; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8d9b360>; layer = <CALayer: 0x8d84dc0>>,<PlayingCardView: 0x8d871e0; frame = (220 20; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8d9b1e0>; layer = <CALayer: 0x8d747a0>>,<PlayingCardView: 0x8d80500; frame = (20 159; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8d9b240>; layer = <CALayer: 0x8d80570>>,<PlayingCardView: 0x8d991c0; frame = (120 159; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8d993f0>; layer = <CALayer: 0x8d992d0>>,<PlayingCardView: 0x8d7fb80; frame = (220 159; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8d9b2a0>; layer = <CALayer: 0x8d85c00>>,<PlayingCardView: 0x8d7b2d0; frame = (20 295; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8d9b1c0>; layer = <CALayer: 0x8d990d0>>,<PlayingCardView: 0x8d7fbf0; frame = (120 295; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8d9b2d0>; layer = <CALayer: 0x8d7fc60>>,<PlayingCardView: 0x8d84d30; frame = (220 295; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8d9b270>; layer = <CALayer: 0x8d8aac0>>,<PlayingCardView: 0x8d853f0; frame = (20 432; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8d9b300>; layer = <CALayer: 0x8d72800>>,<PlayingCardView: 0x8d99850; frame = (120 432; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8d992b0>; layer = <CALayer: 0x8d99aa0>>,<PlayingCardView: 0x8d85460; frame = (220 432; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8d9b330>; layer = <CALayer: 0x8d81410>>)Printing description of sender->_touches:<__NSArrayM 0x8c82010>(<UITouch: 0x8d827b0> phase: Moved tap count: 1 window: <UIWindow: 0x8c83090; frame = (0 0; 320 568); autoresize = W+H; gestureRecognizers = <NSArray: 0x8c7fe20>; layer = <UIWindowLayer: 0x8c81d60>> view: <PlayingCardView: 0x8d991c0; frame = (120 159; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8d993f0>; layer = <CALayer: 0x8d992d0>> location in window: {214.5, 234.5} previous location in window: {182.5, 234.5} location in view: {94.5, 75.5} previous location in view: {62.5, 75.5}) 打印touches做什么?你不是要取触发手势的view吗? 刚没看收件箱你是说chooseViewIndex值永远为1?如果你的每个PlayingCardView上都有一个手势识别器的话,应该不可能出现这种问题,把你为PlayingCardView添加手势识别器的代码帖上来,或者直接zip你的工程,放在百度盘或者CSDN上都可以 根据2楼的打印信息,可以得出结论:应该使用sender.view!因为Sender是一个手势识别器类型的object,而self.playingCardView里面装的是view类型的object!indexOfObject要求类型一致,才可以返回出正确的index! 看到你的demo,你应该这样:把storyboard里的手势识别器去掉在每一个PlayingCardView初始化的时候,给它们每一个单独的手势识别器 确保你的手势添加到正确的对象上,这里指的是PlayingCardView 的实例化的对象。也只有这样,在手势的target-action 指定的方法中才能正确拿到对象,才能通过拿到的对象去outletCollection 数组中去获取当前对象的索引 针对移动应用的第三方控件技术上是否可行? ipad mini 有连接有线宽带的接口么? 升级到Xcode4报兼容错 表视图的分组分区加载plist文件问题。 请教个问题。。很弱智,不要嘲笑。。 C#开发服务器端 安装mac的棘手问题 求高手 我在AppStore上发行了一个程序,请朋友帮测一下,在AppStore中搜mktNus,多提意见。 ios证书问题 tableview删除cell时总是报错 说增加的行与删除不一致 大神,麻烦回答一下。关于蓝牙4.0 屏幕自动旋转的问题
您好!我打印出来之后是这样的
Printing description of self->_playingCardView:
<__NSArrayI 0x8c96b80>(
<PlayingCardView: 0x8c8a4e0; frame = (0 0; 80 116); opaque = NO; autoresize = W+H; layer = <CALayer: 0x8c755a0>>,
<PlayingCardView: 0x8c92bc0; frame = (120 20; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8c96b50>; layer = <CALayer: 0x8c7e120>>,
<PlayingCardView: 0x8c7a2a0; frame = (220 20; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8c96900>; layer = <CALayer: 0x8c768c0>>,
<PlayingCardView: 0x8c8e6a0; frame = (20 159; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8c96a80>; layer = <CALayer: 0x8c8ac90>>,
<PlayingCardView: 0x8c95610; frame = (120 159; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8c95840>; layer = <CALayer: 0x8c95720>>,
<PlayingCardView: 0x8c93640; frame = (220 159; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8c96ac0>; layer = <CALayer: 0x8c8bc90>>,
<PlayingCardView: 0x8c769d0; frame = (20 295; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8c968e0>; layer = <CALayer: 0x8c95580>>,
<PlayingCardView: 0x8c93360; frame = (120 295; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8c96ae0>; layer = <CALayer: 0x8c8e800>>,
<PlayingCardView: 0x8c8a860; frame = (220 295; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8c96aa0>; layer = <CALayer: 0x8c8a7c0>>,
<PlayingCardView: 0x8c7ebf0; frame = (20 432; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8c96b00>; layer = <CALayer: 0x8c8d4e0>>,
<PlayingCardView: 0x8c95ca0; frame = (120 432; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8c95700>; layer = <CALayer: 0x8c95ef0>>,
<PlayingCardView: 0x8c8cac0; frame = (220 432; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8c96b20>; layer = <CALayer: 0x8c89a40>>
)
Printing description of sender:
<UISwipeGestureRecognizer: 0x8c92c40; state = Ended; view = <PlayingCardView 0x8c92bc0>; target= <(action=swipe:, target=<ViewController 0x8c92f60>)>; direction = right>应该怎么解决呢?新手没学过debug,谢谢解答
另外我看到你是把手势识别器增加到每一个view上的,这时swipe的sender是被识别的手势识别器,而不是sender,你的代码这样改就行了:
- (IBAction)swipe:(UISwipeGestureRecognizer *)sender { NSUInteger chooseViewIndex = [self.playingCardView indexOfObject:sender.view];
[self.game chooseCardAtIndex:chooseViewIndex];
<__NSArrayI 0x8d9b390>(
<PlayingCardView: 0x8d7b4f0; frame = (0 0; 80 116); opaque = NO; autoresize = W+H; layer = <CALayer: 0x8d75650>>,
<PlayingCardView: 0x8d99ad0; frame = (120 20; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8d9b360>; layer = <CALayer: 0x8d84dc0>>,
<PlayingCardView: 0x8d871e0; frame = (220 20; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8d9b1e0>; layer = <CALayer: 0x8d747a0>>,
<PlayingCardView: 0x8d80500; frame = (20 159; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8d9b240>; layer = <CALayer: 0x8d80570>>,
<PlayingCardView: 0x8d991c0; frame = (120 159; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8d993f0>; layer = <CALayer: 0x8d992d0>>,
<PlayingCardView: 0x8d7fb80; frame = (220 159; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8d9b2a0>; layer = <CALayer: 0x8d85c00>>,
<PlayingCardView: 0x8d7b2d0; frame = (20 295; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8d9b1c0>; layer = <CALayer: 0x8d990d0>>,
<PlayingCardView: 0x8d7fbf0; frame = (120 295; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8d9b2d0>; layer = <CALayer: 0x8d7fc60>>,
<PlayingCardView: 0x8d84d30; frame = (220 295; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8d9b270>; layer = <CALayer: 0x8d8aac0>>,
<PlayingCardView: 0x8d853f0; frame = (20 432; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8d9b300>; layer = <CALayer: 0x8d72800>>,
<PlayingCardView: 0x8d99850; frame = (120 432; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8d992b0>; layer = <CALayer: 0x8d99aa0>>,
<PlayingCardView: 0x8d85460; frame = (220 432; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8d9b330>; layer = <CALayer: 0x8d81410>>
)
Printing description of sender->_touches:
<__NSArrayM 0x8c82010>(
<UITouch: 0x8d827b0> phase: Moved tap count: 1 window: <UIWindow: 0x8c83090; frame = (0 0; 320 568); autoresize = W+H; gestureRecognizers = <NSArray: 0x8c7fe20>; layer = <UIWindowLayer: 0x8c81d60>> view: <PlayingCardView: 0x8d991c0; frame = (120 159; 80 116); opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8d993f0>; layer = <CALayer: 0x8d992d0>> location in window: {214.5, 234.5} previous location in window: {182.5, 234.5} location in view: {94.5, 75.5} previous location in view: {62.5, 75.5}
)
你不是要取触发手势的view吗?
你是说chooseViewIndex值永远为1?如果你的每个PlayingCardView上都有一个手势识别器的话,应该不可能出现这种问题,把你为PlayingCardView添加手势识别器的代码帖上来,或者直接zip你的工程,放在百度盘或者CSDN上都可以
应该使用sender.view!
因为Sender是一个手势识别器类型的object,而self.playingCardView里面装的是view类型的object!
indexOfObject要求类型一致,才可以返回出正确的index!
把storyboard里的手势识别器去掉
在每一个PlayingCardView初始化的时候,给它们每一个单独的手势识别器