有没有办法让UIView的背景成为渐变而不进行子类化?我宁愿不使用图像文件来实现这一点.只是为了为背景绘制渐变而必须将UIView子类化似乎很愚蠢.
这是我想要实现的目标:
我想子类化UIScrollView以获得其他功能.这个子类应该能够对滚动作出反应,所以我必须将delegate属性设置为self来接收如下事件:
- (void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView { ... }
Run Code Online (Sandbox Code Playgroud)
另一方面,其他类仍然应该能够接收这些事件,就像它们使用基础UIScrollView类一样.
所以我有不同的想法如何解决这个问题,但所有这些并不完全令我满意:(
我的主要方法是......使用像这样的自己的委托属性:
@interface MySubclass : UIScrollView<UIScrollViewDelegate>
@property (nonatomic, assign) id<UIScrollViewDelegate> myOwnDelegate;
@end
@implementation MySubclass
@synthesize myOwnDelegate;
- (id) initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
self.delegate = self;
}
return self;
}
// Example event
- (void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
// Do something custom here and after that pass the event to myDelegate
...
[self.myOwnDelegate scrollViewDidEndDecelerating:(UIScrollView*)scrollView];
}
@end
Run Code Online (Sandbox Code Playgroud)
这样,当继承的scrollview结束滚动时,我的子类可以执行一些特殊操作,但仍然会通知事件的外部委托.这到目前为止工作.但是因为我想让这个子类可供其他开发人员使用,我想限制对基类委托属性的访问,因为它只应由子类使用.我认为其他开发人员最有可能直观地使用基类的委托属性,即使我在头文件中注释问题.如果有人改变委托属性,子类将不会做它应该做的事情,我现在无法阻止它.这就是我不知道如何解决它的问题.
我尝试尝试覆盖委托属性,使其只读取:
@interface MySubclass : UIScrollView<UIScrollViewDelegate>
...
@property (nonatomic, assign, …Run Code Online (Sandbox Code Playgroud) 在超类中MyClass:
@interface MyClass : NSObject
@property (nonatomic, strong, readonly) NSString *pString;
@end
@implementation MyClass
@synthesize pString = _pString;
@end
Run Code Online (Sandbox Code Playgroud)
在子类中 MySubclass
@interface MySubclass : MyClass
@end
@implementation MySubclass
- (id)init {
if (self = [super init]) {
_pString = @"Some string";
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
问题是编译器不认为它_pString是成员MySubclass,但我在访问它时没有问题MyClass.
我错过了什么?
我正在Swift中创建一个UIButton子类,以便在选择时执行自定义绘图和动画
什么在Swift中等同- (void)setSelected:(BOOL)selected于ObjC?
我试过了
override var selected: Bool
所以我可以实现一个观察者,但我得到了
Cannot override with a stored property 'selected'
我有一个类A和一个B继承类的类A,并用更多的字段扩展它.
拥有a类型的对象A,如何创建包含对象包含的所有数据b的类型的B对象a?
我试过a.MemberwiseClone()但只给了我另一个类型的A对象.我不能A投入,B因为继承关系只允许相反的演员.
这样做的正确方法是什么?
我一直在尝试这个,但我似乎无法解决这个问题.我想做这个...
public abstract class SingletonType<TSingleton, TBaseClass> : TBaseClass
where TSingleton : TBaseClass, new()
where TBaseClass : class
{
static TSingleton _singleton;
public static TSingleton Singleton
=> _singleton ?? (_singleton = new TSingleton());
}
Run Code Online (Sandbox Code Playgroud)
计划是像这样使用它,它可以在基类周围"包裹"单例模式......
public class SingletonFoo : SingletonType<SingletonFoo, Foo> {
}
Run Code Online (Sandbox Code Playgroud)
但是,我一直这样做
无法从'TBaseClass'派生,因为它是一个类型参数
嗯...我想类型为你到底是什么做的派生!
那我错过了什么?
注意:这当然是一个简单的例子,因为它没有添加任何有用的东西,但是假设SingletonType有许多其他逻辑与问题无关,因此忽略了关注手头的问题.
我正在研究一个问题,其中有几个实现Foo,伴随着几个FooBuilder.虽然它们Foo共享几个需要设置的常见变量,但它们也有不同的变量,需要各自FooBuilder实现某些特定功能.为了简洁起见,我想让安装FooBuilder人员使用方法链,比如:
public abstract class FooBuilder {
...
public FooBuilder setA(int A) {
this.A = A;
return this;
}
...
}
Run Code Online (Sandbox Code Playgroud)
和
public class FooImplBuilder extends FooBuilder{
...
public FooImplBuilder setB(int B) {
this.B = B;
return this;
}
public FooImplBuilder setC(int C) {
this.C = C;
return this;
}
...
}
Run Code Online (Sandbox Code Playgroud)
等等,有几种不同的FooBuilder实现方式.这在技术上完成了我想要的一切,但是,这种方法对执行方法链接时方法调用的顺序很敏感.以下是方法未定义的编译错误:
someFoo.setA(a).setB(b)...
Run Code Online (Sandbox Code Playgroud)
要求开发人员考虑链中方法调用的顺序.为了避免这种情况,我想让setter以FooBuilder某种方式返回实际的实现子类.但是,我不知道该怎么做.什么是最好的方法?
目前我有一个名为的模型类Post.
class Post extends Eloquent {
protected $table = 'posts';
protected $fillable = array('user_id', 'title', 'description', 'views');
/*
* Relationships
*/
public function user()
{
return $this->belongsTo('User');
}
public function tags()
{
return $this->belongsToMany('Tag', 'post_tags');
}
public function reactions()
{
return $this->hasMany('Reaction');
}
public function votes()
{
return $this->hasMany('PostVote');
}
//Scopes and functions...
}
Run Code Online (Sandbox Code Playgroud)
我想把帖子分成两种不同的类型; articles和questions.我认为最好的方法是继承,所以Article并且Question会扩展Post.最好的方法是什么,从哪里开始?
在ES6中,有没有办法调用通过可变参数传递的父构造函数,la foo.apply(this, arguments)?我找到了答案,我看到的唯一实例是调用super()(无参数)或调用super(x, y)(使用特定参数).super.apply(this, arguments)似乎不起作用.
我创建了一个扩展Array的类.我想在调用继承的push函数之前执行任意代码.
class newArray extends Array{
//execute any logic require before pushing value onto array
this.push(value)
}Run Code Online (Sandbox Code Playgroud)
subclass ×10
inheritance ×4
ios ×3
c# ×2
ecmascript-6 ×2
objective-c ×2
class ×1
copy ×1
delegates ×1
eloquent ×1
generics ×1
interface ×1
iphone ×1
java ×1
javascript ×1
laravel ×1
mysql ×1
object ×1
overriding ×1
superclass ×1
swift ×1
uibutton ×1
uiscrollview ×1
uiview ×1