UIView中的UIButton不可点击
Posted
技术标签:
【中文标题】UIView中的UIButton不可点击【英文标题】:UIButton inside UIView not clickable 【发布时间】:2012-09-18 03:59:10 【问题描述】:我对此有点卡住,我在 UIViewController
中有一个 UIButton
,但由于某种原因,UIButton
没有响应。
_downloadButton = [[DownloadButtonViewController alloc] init];
_downloadButton.issue = _issue;
_downloadButton.view.frame = CGRectMake(self.descriptionLabel.frame.origin.x, self.descriptionLabel.frame.origin.y + self.descriptionLabel.frame.size.height + 20, 200, 27);
[self.view addSubview:_downloadButton.view];
UIButton *tmpButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
tmpButton.titleLabel.text = @"test";
tmpButton.frame = CGRectMake(_downloadButton.view.frame.origin.x, _downloadButton.view.frame.origin.y - 30, _downloadButton.view.frame.size.width, _downloadButton.view.frame.size.height);
[self.view addSubview:tmpButton];
为了查看是否没有任何重叠,我添加了另一个 UIButton
稍低一点,即使我将它添加到相同的位置它仍然有效。
我的应用的结构是这样的
- UIViewController
- UIScrollView
- ThumbCover
- UIImageView
- DownloadButton --> NOT WORKING
- UIButton --> WORKING
- UILabel
- ThumbCover
- UIImageView
- DownloadButton --> NOT WORKING
- UIButton --> WORKING
- UILabel
- ThumbCover
- UIImageView
- DownloadButton --> NOT WORKING
- UIButton --> WORKING
- UILabel
- ThumbCover
- UIImageView
- DownloadButton --> NOT WORKING
- UIButton --> WORKING
- UILabel
DownloadButton
只是一个简单的UIButton
,没什么特别的。
【问题讨论】:
尝试更改 uibutton 的位置并检查 没有看到在按钮上添加动作的代码。 你是否覆盖了DownloadButtonViewController
的任何触摸方法?
@Neo,我把它放在哪里都没关系,DownloadButton
只是从不响应
@Veelian,没有操作按钮仍然可以明显点击,没关系
【参考方案1】:
您已将 viewcontroller 的视图高度指定为 27
_downloadButton.view.frame = CGRectMake(self.descriptionLabel.frame.origin.x, self.descriptionLabel.frame.origin.y + self.descriptionLabel.frame.size.height + 20, 200, 27);
如果您的按钮框架在其父视图(viewcontroller 的视图)的框架之外,即上述框架,它不会响应您的触摸
【讨论】:
谢谢,好建议,但似乎情况并非如此,我可以将DownloadButtonViewController
添加到其他任何地方,这样就可以了,事实上我还有另一个UIScrollView
具有相同的按钮里面和那里它只是工作
终于弄明白了,和IB中frame的大小有关,不知道为什么不是_downloadButton.view.frame
设置的【参考方案2】:
你真的为按钮设置了目标吗? (问,因为在提供的代码中,我看不到!)否则,它当然不会响应。
【讨论】:
如前所述,该按钮在视觉上是不可点击的,tmpButton
也没有目标,但您仍然可以看到它是否可点击。【参考方案3】:
我输入了您的代码,但更改了覆盖的两行,所以只需尝试此代码...
_downloadButton = [[DownloadButtonViewController alloc] init];
_downloadButton.issue = _issue;
_downloadButton.view.frame = CGRectMake(self.descriptionLabel.frame.origin.x, self.descriptionLabel.frame.origin.y + self.descriptionLabel.frame.size.height + 20, 200, 27);
UIButton *tmpButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
tmpButton.titleLabel.text = @"test";
tmpButton.frame = CGRectMake(_downloadButton.view.frame.origin.x, _downloadButton.view.frame.origin.y - 30, _downloadButton.view.frame.size.width, _downloadButton.view.frame.size.height);
[self.view addSubview:tmpButton];
[self.view addSubview:_downloadButton.view];
希望对您有所帮助...
:)
【讨论】:
您所做的具体更改是什么? 我只是覆盖按钮见行 [self.view addSubview:_downloadButton.view];位置是最后只是将最后一行放在代码的最后.. :) 我怀疑这会有所不同,tmpButton 只是一个示例,显示视图中的交互实际上是有效的,此外,按钮已经添加到我的视图的最后 它不可点击,是的,我设置了一个目标,只是在这种情况下不可点击,在任何其他情况下它都有效。 好的,因此我只是用_downloadbutton覆盖你的tmpbutton。好的,现在只需将这一行放在所有代码的末尾 [self.view bringSubviewToFront:_downloadButton.view];试试吧,伙计。 :)【参考方案4】:就我而言,我的动画过渡似乎尚未完成。我忘了把 completeTransition:Bool
放在我的 animateTransition:context
方法的末尾,使我的视图控制器中的所有按钮都被禁用而不是 userinteractionEnabled
。
【讨论】:
【参考方案5】:看着你这段代码
_downloadButton = [[DownloadButtonViewController alloc] init];
我并不是说你的命名方式是错误的,但我怀疑你的 DownloadButtonViewController 是否是 UIButton。只是为了确保打开你的 DownloadButtonViewController.h 并检查你是否有这个
@interface DownloadButtonViewController : UIButton
【讨论】:
DownloadButtonViewController
不是 UIButton,它是一个带有 UIButton
内部的 UIView【参考方案6】:
replace this line..
tmpButton.titleLabel.text = @"test";
作为
[tmpButton setTitle: @"test" forState:UIControlStateNormal];
【讨论】:
以上是关于UIView中的UIButton不可点击的主要内容,如果未能解决你的问题,请参考以下文章
UITableViewCell 中的 UIButton 不可点击