标签: subclassing

来自Images的自定义UIToolBar

我需要创建一个使用图像作为背景的UIToolbar对象.大多数按钮也是图像和矩形.但是,一个按钮是圆形的,并与工具栏重叠,就像Windows任务栏上的"开始"按钮一样.见下文.

我知道我需要将UIToolbar子类化为绘制工具栏的图像 - 我想.如果是这样,有没有人有示例代码显示如何做到这一点?

此外,有没有人对如何实现更大的圆形按钮有任何想法?我正在考虑另一个自定义子类,但不确定是否有更简单的方法.

我可以让艺术家们无论如何需要切割图像,我确信圆形按钮需要切割一些如何.

任何想法或示例代码?

alt text http://iphone.sophtware.com/toolbar.png

iphone cocoa-touch image uitoolbar subclassing

8
推荐指数
1
解决办法
1939
查看次数

子类化UINavigationBar ...如何在UINavigationController中使用它?

我想子类化UINavigationBar(设置自定义背景图像和文本颜色)并将其用于我的应用程序中的所有导航栏.查看UINavigationController的API文档,看起来navigationBar是只读的:

@property(nonatomic,readonly)UINavigationBar*navigationBar

有没有办法在我的UIViewControllers中实际使用自定义UINavigationBar?我知道其他应用程序已经完成了自定义导航栏,如flickr:

http://img.skitch.com/20100520-bpxjaca11h5xne5yakjdc2m6xx.png

这是我的UINavigationBar子类:

#import <UIKit/UIKit.h>

@interface MyNavigationBar : UINavigationBar <UINavigationBarDelegate> {

}

@end
Run Code Online (Sandbox Code Playgroud)

实施

#import "MyNavigationBar.h"

@implementation MyNavigationBar

- (id)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        // Initialization code
    }
    return self;
}

- (void)drawRect:(CGRect)rect {
    // override the standard background with our own custom one
    UIImage *image = [[UIImage imageNamed:@"navigation_bar_bgd.png"] retain];
    [image drawInRect:rect];
    [image release];
}

#pragma mark -
#pragma mark UINavigationDelegate Methods

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
    // use the title of the passed …
Run Code Online (Sandbox Code Playgroud)

iphone uinavigationbar uinavigationcontroller subclassing

8
推荐指数
1
解决办法
5298
查看次数

从超类方法返回子类对象

我一直回到这个问题的变种:它可能有一个非常简单的解决方案,但我似乎无法弄清楚...

我有一堆xQuantity形式的类,例如DistanceQuantity,AreaQuantity等,它们扩展了一个DimensionQuantity类.现在你可以添加或减去DistanceQuantity或AreaQuantity等,但你不能混合它们,所以我认为我需要在子类中有(短)加,减等方法,但我想减少任何逻辑重复到最低限度.但是,我需要返回子类的对象,这似乎很难从超类方法中做到.我相信这可以使用反射来完成,但AFAIK你仍然需要在子类方法的最后做一个演员,而且我被告知反射可能很昂贵......到目前为止我想出的最好的是:

在DistanceQuantity(和其他类似的):

public DistanceQuantity() {     
}

public DistanceQuantity add(DistanceQuantity d1) {
    DistanceQuantity dn = new DistanceQuantity(); 
    Object o = super.add(dn, this, d1, DistanceUnit.REF_UNIT);
    return (DistanceQuantity) o;
}
Run Code Online (Sandbox Code Playgroud)

在DimensionQuantity中(减去一些不太相关的语句):

public Object add(DimensionQuantity dn, DimensionQuantity d1, DimensionQuantity d2, 
  AbstractUnit au) {
    dn.unit = au;
    dn.scalar = d1.scalar + d2.scalar;
    dn.units = dn.scalar;    
    return dn;   
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以提出更精简的代码 - 这仍然是类型安全的吗?TIA

java subclassing

8
推荐指数
1
解决办法
5212
查看次数

如何在使用故事板时继承Navigation Controller?

我在界面构建器中使用故事板使用Xcode菜单'Editor ... Embed in ... Navigation Controller'.

似乎在iOS 6中你必须将UINavigationController子类化为允许所有方向

- (NSUInteger)supportedInterfaceOrientations {
    return (UIInterfaceOrientationMaskAll   );
}
Run Code Online (Sandbox Code Playgroud)

但是,如何将UINavigationController与故事板应用程序子类化,因为代码中没有对它的引用?

iphone storyboard uinavigationcontroller subclassing uiinterfaceorientation

8
推荐指数
1
解决办法
3637
查看次数

子类化核心Ruby类,如Hash

我需要一个类似Hash的类,但不一定需要所有的Hash方法.我已经读过像Hash那样继承核心类并不是一个好主意.无论这是否属实,做这种事情的最佳做法是什么?

# (a) subclass Hash, add new methods and instance variables
class Book < Hash
   def reindex
     @index = .....
   end
end

# (b) create a new class from scratch, containing a hash, 
#    and define needed methods for the contained hash
class Book
  def initialize(hash)
    @data = hash
  end 
  def []=(k,v)
    @data[k] = v
  end
  # etc....
  def reindex
    @index = ....
  end

# (c) like (b) but using method_missing

# (d) like (b) but using delegation
Run Code Online (Sandbox Code Playgroud)

我意识到Ruby有多种方法可以完成给定的任务,但是在相对简单的情况下,是否有任何一般规则可以解决上述哪种方法?

ruby hash duck-typing subclassing

8
推荐指数
1
解决办法
3667
查看次数

通过继承`io.TextIOWrapper`对子文件进行子类化 - 但它的构造函数有哪些签名?

我试图子类io.TextIOWrapper下面这篇文章,虽然我的目标是不同的.从这开始(NB:动机):

class MyTextIOFile(io.TextIOWrapper):
    def read(self, *args):
        cont = super().read(*args)
        return cont.replace("\x00", "")
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用我的构造函数打开文件

In [81]: f = MyTextIOFile("file.csv")
Run Code Online (Sandbox Code Playgroud)

但这给了:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-90-343e18b2e32f> in <module>()
----> 1 f = MyTextIOFile("file.csv")

AttributeError: 'str' object has no attribute 'readable'
Run Code Online (Sandbox Code Playgroud)

事实上,似乎io.TextIOWrapper构造函数希望传递一个文件对象.通过反复试验,我发现这个文件对象需要以二进制模式打开.但是我无法在任何地方找到文档,而且我不想构建在无证件行为之上(实际上,尝试继续使用它已经导致我在尝试传递对象时遇到问题csv.reader).在Python 3中对文件对象进行子类化的正确和受支持的方法是什么?

我正在使用Python 3.5.0.

python io subclassing python-3.x

8
推荐指数
1
解决办法
606
查看次数

为什么我不能在Swift中使用泛型类的子类?

为什么Swift不允许我为Foo<U>类型的变量赋值Foo<T>,其中U是T的子类?

例如:

class Cheese {
    let smell: Int
    let hardness: Int
    let name: String

    init(smell: Int, hardness: Int, name: String) {
        self.smell = smell
        self.hardness = hardness
        self.name = name
    }

    func cut() {
        print("Peeyoo!")
    }
}

class Gouda: Cheese {
    let aged: Bool

    init(smell: Int, hardness: Int, name: String, aged: Bool) {
        self.aged = aged
        super.init(smell: smell, hardness: hardness, name: name)
    }

    override func cut() {
        print("Smells delicious")
    }
}

class Platter<Food> {
    var food: …
Run Code Online (Sandbox Code Playgroud)

generics subclassing swift

8
推荐指数
1
解决办法
1333
查看次数

如何在编辑框中接收TAB键?

我想OnKeyPress在用户按下Tab键时接收事件.

procedure TForm1.Edit1(Sender: TObject; var Key: Char);
begin
   case Key of
   #09:
      begin
         //Snip - Stuff i want to do
      end;
   end;
end;
Run Code Online (Sandbox Code Playgroud)

我尝试子类化Edit框,并处理WM_GETDLGCODE消息:

procedure TfrmEnableVIPMode.AccountNumberWindowProc(var Message: TMessage);
begin
   case Message.Msg of
   WM_GETDLGCODE: Message.Result := DLGC_WANTTAB;
   else
      FOldAccountNumberWindowProc(Message);
   end;
end;
Run Code Online (Sandbox Code Playgroud)

我现在收到Tab KeyPress事件(正如我所希望的那样),但现在按下LeftRight光标键会使焦点转移到Tab键顺序中的上一个或下一个控件.

收到Tab键按键事件的正确方法是什么?

奖金阅读

我试着做MSDN文档所说的内容:

wParam
用户按下的虚拟键,提示Windows发出此通知.处理程序必须有选择地处理这些键.例如,处理程序可能接受并处理VK_RETURN,但将VK_TAB委托给所有者窗口.有关值列表,请参阅虚拟键代码.

lParam指向MSG结构的指针(如果系统正在执行查询,则为NULL).

wParamwParam均为零.

更新二

我意识到我和这个答案有同样的错误:

if Message.Msg …
Run Code Online (Sandbox Code Playgroud)

delphi accessibility delphi-5 subclassing

7
推荐指数
2
解决办法
3971
查看次数

来自numpy数组的派生类与矩阵和掩码数组不兼容

我试图将numpy ndarray子类化,但是我无法使用其他numpy类型(如masked array或matrix)进行操作.在我看来,__ array_priority__没有被尊重.作为一个例子,我创建了一个模拟重要方面的虚拟类:

import numpy as np

class C(np.ndarray):

    __array_priority__ = 15.0

    def __mul__(self, other):
        print("__mul__")
        return 42

    def __rmul__(self, other):
        print("__rmul__")
        return 42
Run Code Online (Sandbox Code Playgroud)

我的类和普通 ndarray 之间的操作按预期工作:

>>> c1 = C((3, 3))
>>> o1 = np.ones((3, 3))
>>> print(o1 * c1)
__mul__
42
>>> print(c1 * o1)
__rmul__
42 
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用矩阵(或掩码数组)时,不尊重数组优先级.

>>> m = np.matrix((3, 3))
>>> print(c1 * m)
__mul__
42
>>> print(m * c1)
Traceback (most recent call last):
...
  File "/usr/lib64/python2.7/site-packages/numpy/matrixlib/defmatrix.py", line 330, in …
Run Code Online (Sandbox Code Playgroud)

python arrays numpy matrix subclassing

7
推荐指数
1
解决办法
425
查看次数

对张量流损失类 (categorical_crossentropy) 进行子分类以创建加权损失函数时出现意外的关键字参数“sample_weight”

努力让子类损失函数在 Tensorflow (2.2.0) 中工作。最初尝试了这段代码(我知道它对其他人有用 - 请参阅https://github.com/keras-team/keras/issues/2115#issuecomment-530762739):

import tensorflow.keras.backend as K
from tensorflow.keras.losses import CategoricalCrossentropy


class WeightedCategoricalCrossentropy(CategoricalCrossentropy):

    def __init__(self, cost_mat, name='weighted_categorical_crossentropy', **kwargs):
        assert(cost_mat.ndim == 2)
        assert(cost_mat.shape[0] == cost_mat.shape[1])

        super().__init__(name=name, **kwargs)
        self.cost_mat = K.cast_to_floatx(cost_mat)

    def __call__(self, y_true, y_pred):

        return super().__call__(
            y_true=y_true,
            y_pred=y_pred,
            sample_weight=get_sample_weights(y_true, y_pred, self.cost_mat),
        )

def get_sample_weights(y_true, y_pred, cost_m):
    num_classes = len(cost_m)

    y_pred.shape.assert_has_rank(2)
    y_pred.shape[1].assert_is_compatible_with(num_classes)
    y_pred.shape.assert_is_compatible_with(y_true.shape)

    y_pred = K.one_hot(K.argmax(y_pred), num_classes)

    y_true_nk1 = K.expand_dims(y_true, 2)
    y_pred_n1k = K.expand_dims(y_pred, 1)
    cost_m_1kk = K.expand_dims(cost_m, 0)

    sample_weights_nkk = cost_m_1kk * y_true_nk1 * y_pred_n1k
    sample_weights_n …
Run Code Online (Sandbox Code Playgroud)

subclassing tensorflow2.0

7
推荐指数
1
解决办法
4681
查看次数