uibutton-subView 的UIButton无法点击

问题描述

subView 的UIButton无法点击

代码:

UIButton *mainButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
[mainButton setImage:[UIImage imageNamed:@"CircleShape.png"] forState:UIControlStateNormal];
mainButton.center = CGPointMake(self.view.frame.size.width/2.0f, self.view.frame.size.height/2.0f);
[self.view addSubview:mainButton];

UIView *subView = [[UIView alloc] initWithFrame:CGRectMake(0, 100, 200, 100)];
[subView setBackgroundColor:[UIColor purpleColor]];
[mainButton addSubview:subView];

UIButton *secondButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
[secondButton setImage:[UIImage imageNamed:@"CircleShape.png"] forState:UIControlStateNormal];
secondButton.center = CGPointMake(subView.frame.size.width/2.0f, subView.frame.size.height/2.0f);
[subView addSubview:secondButton];

为什么mainButton 可以点击,但是secondButton就不可以点击呢。

解决方案

在self.view添加子view。

UIView *subView = [[UIView alloc] initWithFrame:CGRectMake(0, 100, 200, 100)];
[subView setBackgroundColor:[UIColor purpleColor]];
[self.view addSubview:subView];

UIButton *secondButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
[secondButton setImage:[UIImage imageNamed:@"CircleShape.png"] forState:UIControlStateNormal];
secondButton.center = CGPointMake(subView.frame.size.width/2.0f, subView.frame.size.height/2.0f);
[subView addSubview:secondButton];
UIButton *thirdButton = [[UIButton alloc] initWithFrame:CGRectMake(100, 0, 100, 100)];
[secondButton setImage:[UIImage imageNamed:@"CircleShape.png"] forState:UIControlStateNormal];
secondButton.center = CGPointMake(subView.frame.size.width/2.0f, subView.frame.size.height/2.0f);
[subView addSubview:secondButton];

解决方案二:

这是iOS的event 系统的一个特点。parent view 只能把自己frame里的事件一级一级的往自己的subview 发而且只能发给面上的subview。
上面代码 因为mainButton frame (0, 0, 100, 100) 它的子view subView frame是(0, 100, 200, 100) 已经出了mainButton的frame
所以 mainButton上的事件传不到subview的,那就更传不到subview的子view secondButton了 所以secondButton点击了也没反应
mainButton没法把发生在自己frame外的事件传给自己的子view 虽然它们是可见的

你可以试下把mainButton frame变大点,包含secondButton, 你就发现subview可点了

UIButton *mainButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
时间: 2024-09-15 19:15:56

uibutton-subView 的UIButton无法点击的相关文章

ios-给subView添加UIButton

问题描述 给subView添加UIButton 在用户点击屏幕时,应该有一个带按钮的弹出窗出现.但是弹出窗出现,按钮没出现.不知道哪出错了.是在subView中的subView. -(void) popUpWithX:(int)x andY:(int)y { CGRect popUpRect = CGRectMake(x, y, 125, 75); popUp = [[UIView alloc] initWithFrame:popUpRect]; popUp.backgroundColor =

IOS UIButton使用详解

第一.UIButton的定义       UIButton *button=[[UIButton buttonWithType:(UIButtonType); 能够定义的button类型有以下6种,  typedef enum {  UIButtonTypeCustom = 0, 自定义风格  UIButtonTypeRoundedRect, 圆角矩形   UIButtonTypeDetailDisclosure, 蓝色小箭头按钮,主要做详细说明用  UIButtonTypeInfoLight,

UIButton中的**EdgeInsets是做什么用的?

UIButton中的**EdgeInsets是做什么用的?   UIEdgeInsetsMake Creates an edge inset for a button or view. An inset is a margin around the drawing rectangle where each side (left, right, top, and bottom) can have a different value. 给一个button或者view创建一个嵌入的边缘. inset是

iOS设置UIButton文字显示位置和字体大小、颜色的方法_IOS

前言 大家都知道UIButton按钮是IOS开发中最常用的控件,作为IOS基础学习教程知识 ,初学者需要了解其基本定义和常用设置,以便在开发在熟练运用. 一.iOS设置UIButton的字体大小 btn.frame = CGRectMake(x, y, width, height); [btn setTitle: @"search" forState: UIControlStateNormal]; //设置按钮上的自体的大小 //[btn setFont: [UIFont system

IOS倒计时设置UIButton标题title的抖动问题_IOS

例如,在发送验证码后,button状态需要变为disable,每隔一秒显示倒计时时间,仅仅设置 [button setTitle:title forState:UIControlStateDisabled]; 或 [button setTitle:title forState:UIControlStateNormal]; 是不够的,按钮会一闪一闪的抖动. 需要同时设置: button.titleLabel.text = title; [button setTitle:title forState

IOS多媒体

--iOS多媒体 概览 随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操作都提供了多套API.在今天的文章中将会对这些内容进行一一介绍: 音频 音效 音乐 音频会话 录音 音频队列服务 视频 MPMoviePlayerController MPMoviePlayerViewController AVPlayer 摄像头 UIImagePicker

iOS开发系列--音频播放、录音、视频播放、拍照、视频录制

概览 随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操作都提供了多套API.在今天的文章中将会对这些内容进行一一介绍: 音频 音效 音乐 音频会话 录音 音频队列服务 视频 MPMoviePlayerController MPMoviePlayerViewController AVPlayer 摄像头 UIImagePickerControlle

ios swift模仿qq登陆界面,xml布局

给大家推荐两个学习的地址: 极客学院的视频:http://www.jikexueyuan.com/path/ios/ 一个博客:http://blog.csdn.net/lizhongfu2013/article/details/29210015 主要想要实现一个模仿的登陆界面 代码: // // LoginViewController.swift // IBM_LOGIN // // Created by dcintern on 6/26/15. // Copyright (c) 2015 d

IOS事件响应控制

    以前遇到一个项目,一个UIImageView对象上面有一个UIButton对象,然而项目的需求需要在点击 button的同时,UIImageView也接收到点击事件,在不使用代理和通知方法的前提下,通过事件响应链的原理,我们也可以很便捷的解决这个问题.     在处理这个问题之前,我们应该先清楚IOS的事件响应机制到底是个什么样的原理. 首先,这个事件响应的机制是分为两个部分的. 1.先在视图层级关系中找到应该响应事件的那个视图. 这一步是什么意思,其实很简单,就是找到你所触摸点对应的那