首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

uibutton.addTarget到UIView的Swift类不起作用

问题描述:uibutton.addTarget到UIView的Swift类不起作用。

解答:在Swift中,我们可以使用addTarget(_:action:for:)方法将一个目标(target)和一个动作(action)添加到一个按钮(UIButton)上,以响应按钮的点击事件。然而,如果我们将addTarget方法应用于一个UIView的实例(例如UIView的子类),则不会起作用,因为UIView类本身并没有定义响应点击事件的方法。

解决这个问题的方法是,我们需要将UIView的子类转换为UIButton的子类,以便能够使用addTarget方法。具体步骤如下:

  1. 创建一个继承自UIButton的子类,例如CustomButton
  2. CustomButton类中,重写init(frame:)方法和init(coder:)方法,并在这些方法中设置按钮的初始属性和样式。
  3. CustomButton类中,添加一个方法来处理按钮的点击事件,例如buttonClicked(_:)
  4. buttonClicked(_:)方法中,实现按钮点击事件的逻辑。
  5. 在需要使用按钮的地方,使用CustomButton类的实例来替代UIView的实例,并调用addTarget(_:action:for:)方法来添加点击事件。

下面是一个示例代码:

代码语言:swift
复制
import UIKit

class CustomButton: UIButton {
    override init(frame: CGRect) {
        super.init(frame: frame)
        // 设置按钮的初始属性和样式
        // ...
    }
    
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        // 设置按钮的初始属性和样式
        // ...
    }
    
    @objc func buttonClicked(_ sender: UIButton) {
        // 处理按钮的点击事件
        // ...
    }
}

// 在需要使用按钮的地方
let customButton = CustomButton(frame: CGRect(x: 0, y: 0, width: 100, height: 50))
customButton.addTarget(customButton, action: #selector(customButton.buttonClicked(_:)), for: .touchUpInside)

在上述示例中,我们创建了一个名为CustomButton的子类,继承自UIButton,并重写了初始化方法和添加了一个处理按钮点击事件的方法。然后,我们在需要使用按钮的地方,创建了一个CustomButton的实例,并调用addTarget(_:action:for:)方法来添加点击事件。

请注意,这只是一个示例代码,实际使用时需要根据具体的需求进行调整。

推荐的腾讯云相关产品:腾讯云移动应用分析(Mobile Analytics),该产品提供了移动应用的数据分析和统计服务,帮助开发者了解用户行为和应用性能,优化移动应用的用户体验。产品介绍链接地址:https://cloud.tencent.com/product/ma

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Swift 构造器使用

注: 我们在这篇博客中提到构造器都为构造器, 在这里不提及值构造器使用,详见文档. 刚刚使用这个构造器时候我感觉很困惑啊, 不就是个 init, 你给我搞这么多事情干什么?...最后一个常见错误大概是这样 复制代码 Property 'self.label' not initialized at super.init call Orz, 这里我已经放弃了自己通过尝试来解决这些问题了...每个应该只有少量指定构造器, 大多数只有一个指定构造器, 我们使用 Swift 做 iOS 开发时就会用到很多 UIKit 框架指定构造器, 比如说: Swift 复制代码 init()init...Swift 编译器会对初始化方法进行安全地检查已保证实例初始化可以被安全正确执行: 指定构造器必须要确保所有被中提到属性在代理向上调用父指定构造器前被初始化, 之后才能将其它构造任务代理给父构造器...跟 ObjC 不同, Swift子类默认不会继承来自父所有构造器. 这样可以防止错误继承并使用父构造器生成错误实例(可能导致子类中属性没有被赋值而正确初始化).

1.7K20

iOS - Swift 面向协议编程(二)面向对象开发

上一篇文章iOS - Swift 面向协议编程(一) 已经对Swift面向协议编程做了介绍,接下来该篇文章将使用面向协议开发(POP)来做下实际应用 在实际开发中,自定义View基本上是必须...好,现在又有一个SecondTypeView,也是要求使用xib来初始化view。这时我们就会想,一样加载xib方法,那我们就把它抽取出来放到父就可以了。...这里以BaseView.swift为例 父主要实现代码 extension BaseView { class func loadFromNib() -> BaseView {...面向协议开发 将BaseView删除,FirstTypeView和SecondTypeView改回继承于UIView 1 新建一个Swift文件 Nibloadable.swift ?...loadFromNib协议方法 好了,面向协议开发应用就�记录到这里,希望能帮助大家! Demo

58330

Swift3.0 - 和结构体区别

必须知道 共同点 a.定义存储属性 b.定义函数 c.定义下标,使用下表访问自己值 d.定义初始化设置自己初始化状态 e.扩展自己功能 f.实现协议提供某种特定标准功能 不同点(...有更多功能) a.可以继承,结构体不能继承 b.能够在运行时检查和解释实例类型 c.Deinitializers使一个实例来释放任何资源分配 d.有引用计数,允许对象被多次引用...} // 定义结构体 struct StudentS{ var name:String } 提示: 在中定义属性必须要注意,如果你定义存储属性不是可选值类型,必须进行初始化,不然编译会报错...,但是结构体不会报错,因为系统默认会给结构体创建初始化方法 定义函数 // 定义 class StudentC{ static var des:String = "学生"..." var name:String static func describe()->String{ return "这是一个定义学生" } } 提示: 可以使用关键字

47410

《Motion Design for iOS》(十七)

让我们先添加一个简单UIView对象屏幕上并设置它圆角。我们要把它添加到我们主窗口上时因为它是一个快速例子,但在真实app界面中你需要添加到管理当前界面的视图控制器中。...如果你在你appdelegate-application:didFinishLaunchingWithOptions方法中添加这个代码,就可以在运行后屏幕上看到它。...这里是和上面一样功能,但是是Swift而不是Objective-C写。你可以打开Balls In Swift Xcode工程导出这个例子Swift版本。...让我们创建一个基于block动画来将圆从1.0扩大2.0倍,这会让它变成原来两倍大。...上称为 +animateWithDuration:delay:options:animations:completion: 方法时UIView提供多种动画方法之一。

94020

【从零开始用Swift开发一个iOS应用(仿微博)】开篇-1. demo上手体验

最近在学iOS开发,本系列会针对iOS从前开发进行全面讲解,小到开发工具使用,大应用市场上线。 ?...二、代码实现 2.1 程序入口说明 Application/AppDelegate.swift文件中@UIApplication注解,表示这个Class是程序入口 ?...三、上述示例swift与object-c语法对比 3.1 创建视图类比 - Swift: UIView(XXX:) - OC: [[UIView alloc] initWithXXX:] 名()...== alloc / init 等价 3.2 方法类比 Swift: UIColor.yellow OC: [UIColor yellow] 3.3 访问当前对象属性类比 建议:都不使用self...,不需要使用`:` OC: @selector 3.7 调试对比 Swift: print(xxx) 效率高,log中不包含时间,用#function来打印当前执行方法 OC: NSLog,用__FUNCTION

3.8K31

窥探Swift之类继承与访问权限

上一篇博客《窥探Swift之别具一格Struct和Class》博客可谓是给Swift开了个头。关于内容还有很多,今天就来搞一下继承以及访问权限。...在Swift这么面向对象编程语言中,也有类似的概念,不过其具体表达方式以及每种权限作用域不同罢了。在Swift访问权限有private, internal与public。...下方将会给出继承一些示例,通过这些事例来认识一下Swift继承。   1. 父创建     这里我们创建一个名为Father,他可以继承Father。...在Swift中也是有final关键字,被final关键字所修饰是不能用来继承。我们可以把Father定义成final类型,并观察Children发生变化。...二、访问权限     Swift访问权限与其他面向对象编程语言有所不同,虽然Swift访问权限也分为3个等级,但是每个等级所能访问区域与其他编程语言相比还是有些区别的。

1.5K50

深入了解 iOS 初始化

当自定义一个时候,要么直接继承自NSObject,要么继承自UIView或者其他。 无论继承自什么,都经常需要新初始化方法,而这个新初始化方法其实就是新指定初始化器。...根据这条规则,可以从NSObject、UIView中看出,由于UIView拥有新指定初始化器-initWithFrame:,导致父NSObject指定初始化器-init退化成便利初始化器。...必须重写旧定初始化器,在里面调用新指定初始化器 • 在 Swift 中,初始化时候需要保证(结构体、枚举)所有非可选类型属性都会有值 • 在 Swift 中,必须在初始化完成后才能调用实例属性...• 在 Swift 中,子类如果没有新创建一个指定初始化器,并且没有重写父指定初始化器,则会继承父指定初始化器和便利初始化器 • 在 Swift 中,子类如果新创建一个指定初始化器,或者重写了父某个指定初始化器...,那么就不会继承父指定初始化器和便利初始化器;但是如果重写了父所有指定初始化器,就会继承父便利初始化器 • 在 Swift 中,子类可以把父指定初始化器重写成便利初始化器 • 在 Swift

97710

iOS开源界面布局库终于破3000star

大家可以这里去下载: OC版本MyLayout: https://github.com/youngsoft/MyLinearLayout Swift版本TangramKit: https://github.com...然后又因为懂一点点android相关编程,了解android中有四大布局体系,而其中用最多就是线性布局。于是想既然如此那我为什么不自己写一个类似android线性布局呢?...于是就开始着手写了我布局库第一个版本,现在我都还保留着这个实现和声明: //用于线性布局子视图属性,描述离兄弟视图间隔距离,以及在父视图中比重。...默认是NO.如果设置为YES的话则边缘视图边距不起作用了,而且子视图weight也不起作用了。而且不是调整自己大小了 //也就是当垂直方向则所有子视图按顺序排列在中间。...swift版本TangramKit中得到了有效解决。

1.8K40

Swift 面向对象解析(二)

就可以   具体例子 Swift继承 4:防止重写  final 关键字可以用于修饰 、属性、方法、下标。...二:构造与析构 由于继承,子类不仅包括了自己定义存储属性,还包括从父继承得到存储属性,所有存储属性,包括所有的继承父属性,在构造过程中必须设置初始值,因此类构造过程相对比较复杂...与构造器相反是,Swift 允许为(枚举,结构体不允许)定义析构器,在实例销毁之前,系统就会自动调用该实例析构器。         ...哈哈~        下面给大家学习链接,希望给大家有帮助: Swift构造和析构过程 Swift 构造过程+析构过程(十三) Swift构造过程 三:多态 Swift引用变量有两个类型,...看下面的代码例子,下面是给UIView扩展了两个方法: // MARK: - UIView扩展方法 extension UIView{ func containsSubView(subView

94870

Swift开发规范-修订版

前言 《Swift开发规范》发布之后得到了很多Swifter关注,很多读者提议最好为每条规约添加一些代码示例,其实在发布之前,我就考虑要加代码示例这件事,但是后来还是因为偷懒没加。...最近利用了空余时间,对之前版本进行了完善,加入了代码示例及编译效率规约等等,并且考虑读者对某些规约有些疑惑,也为部分规约增加了说明,推出新版本--《Swift开发规范-修订版》。...也可使用“原生类型名 +Extensions”形式; 正例:UIView+Frame.swift / MessageViewController+Request.swift / UIViewExtensions.swift...; 【推荐】实现每个协议时,在单独 extension 里来实现; 代码示例(代码不具有业务含义,只是简单格式规约示例) /** 涉及规约 1、左大括号不另起一行; 2、继承后跟空格;...let loginView = UIView() 反例: let loginView = UIView.init() 【强制】如果只有一个 get 计算属性,忽略 get; 正例: var

1.7K50

iOS从Xib中设置样式

项目中找 下面这个是节约时间大功臣:command + shift + o(字母O),在文件数目庞大工程里效果尤为显著,可以让你在茫茫””海中找到你那个它....command + control + ⬆ 或command + control + ⬇会帮我搞定一切. view位置 添加约束时候,谁说控件A要放在控件B下侧才能设置AB在y轴方向上距离?...添加第三方字体 把字体ttf文件像普通文件加入项目中,在xib或storyboard中就可以直接使用新字体了 属性设置 但是很多属性设置 在xib中是不能完全自定义,作为一个喜欢用xib这种方式码客来说...下实现方式(扩展) UIView+Border&CornerRadius.swift import Foundation import UIKit extension UIView {...下实现方式(继承) UIViewBorderCornerRadius.swift import Foundation import UIKit @IBDesignable class UIViewBorderCornerRadius

2.3K20
领券