小编Haa*_*nti的帖子

Swift子类UIView

我刚刚开始使用Swift.我已经阅读了这本书,并且在学习的过程中我学到了更多东西.

我想子类UIView并显示像视图一样的登录.我在Objective-C中创建了这个,但现在我想把它移植到Swift.我不使用故事板,所以我在代码中创建了所有的UI.

但第一个问题是我必须实施initWithCoder.我给它一个默认的实现,因为它不会被调用.现在,当我运行该程序时,它崩溃了,因为我也要实现initWithFrame它.现在我明白了:

override init() {
    super.init()
    println("Default init")
}

override init(frame: CGRect) {
    super.init(frame: frame)
    println("Frame init")
}

required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    println("Coder init")
}
Run Code Online (Sandbox Code Playgroud)

我的问题是我应该在哪里创建我的文本域等...如果我从未实现框架和编码器,我怎么能"隐藏"这个?

ios swift

89
推荐指数
4
解决办法
7万
查看次数

Vim缩进xml文件

我正在学习Vim,但我认为这是一项简单的任务,但我无法让它发挥作用.我有浏览器SO,但解决方案对我不起作用.

我正在尝试正确缩进文件(xml).我使用的命令是:

gg=G 
Run Code Online (Sandbox Code Playgroud)

或ggVG =(自己做这个可能会做一些不同的事情;))

我的.vimrc是:

syntax on 
filetype plugin indent on 
set nu 
Run Code Online (Sandbox Code Playgroud)

xml vim

88
推荐指数
7
解决办法
6万
查看次数

iOS __kindof NSArray?

我一直在检查iOS 9作为开发人员的新功能,其中一些像StackView看起来很棒.

当我去UIStackView的头文件时,我看到了这个:

@property(nonatomic,readonly,copy) NSArray<__kindof UIView *> *arrangedSubviews;
Run Code Online (Sandbox Code Playgroud)

什么是NSArray*的__kindof.我们现在能够在NSArray*上指定类型吗?

小测试:

@interface DXTEST ()
@property (strong, nonatomic) NSMutableArray <__kindof NSString *>  *strings;
@end

@implementation DXTEST

- ( instancetype ) init {
    self = [super init];

    if( self ) {
        _strings = [NSMutableArray new];

        [_strings addObject:@(1)]; <-- compiler warning wieeeeee
    }

    return self;
}

@end
Run Code Online (Sandbox Code Playgroud)

objective-c ios

36
推荐指数
3
解决办法
9809
查看次数

在哪个线程上调用iOS块?

我正在学习斯坦福大学视频中的块.我现在处于解释核心数据的部分.老师们提到了一些事情:

- (void)openWithCompletionHandler:(void (^)(BOOL success))completionHandler;
Run Code Online (Sandbox Code Playgroud)

他说,将在调用方法的线程中调用completionhandler块.所以基本上该方法运行async但是在线程上调用块,让我们假设main.

所以我的问题是在进行方法调用的线程上运行所有块.为了说明为什么我问这个问题,我有一个Async类,它向服务器请求.

所有这些方法的格式如下:

- (void) getSomething:(id <delegateWhatever> const)delegate{
   goto background thread using GCD..
   Got result from server...
   Go back to main thread and call the delegate method...
}
Run Code Online (Sandbox Code Playgroud)

当我使用块时,我不需要担心回到主线程,如果它们将在调用的地方被调用?

希望这很清楚,

提前致谢

objective-c ios

12
推荐指数
1
解决办法
4612
查看次数

iOS Autolayout自适应UI问题

我想根据宽度是否大于高度来改变我的布局.但我不断收到布局警告.我在自适应布局上观看了两个WWDC视频,这些视频帮了很多但没有解决问题.我使用以下代码创建了一个简单版本的布局.这只是让人们可以重现我的问题.代码在iPhone 7 plus上运行.

import UIKit

class ViewController: UIViewController {

    var view1: UIView!
    var view2: UIView!

    var constraints = [NSLayoutConstraint]()

    override func viewDidLoad() {
        super.viewDidLoad()

        view1 = UIView()
        view1.translatesAutoresizingMaskIntoConstraints = false
        view1.backgroundColor = UIColor.red

        view2 = UIView()
        view2.translatesAutoresizingMaskIntoConstraints = false
        view2.backgroundColor = UIColor.green

        view.addSubview(view1)
        view.addSubview(view2)

        layoutPortrait()
    }

    func layoutPortrait() {
        let views = [
            "a1": view1,
            "a2": view2
        ]

        constraints += NSLayoutConstraint.constraints(withVisualFormat: "H:|[a1]|", options: [], metrics: nil, views: views)
        constraints += NSLayoutConstraint.constraints(withVisualFormat: "H:|[a2]|", options: [], metrics: nil, views: views)
        constraints += …
Run Code Online (Sandbox Code Playgroud)

ios autolayout swift adaptive-layout

9
推荐指数
1
解决办法
1531
查看次数

Android布局以<?xml version ...?>开头

我是Android应用开发的初学者.我的问题非常简单.我似乎无法确定布局文件夹中的xml文件是否应该以:

<?xml version="1.0" encoding="utf-8"?>
Run Code Online (Sandbox Code Playgroud)

当我做一个启动项目时,它不存在.但我也在读一本书,上面写着应该在那里?

什么是正确的方法?

android

8
推荐指数
2
解决办法
4706
查看次数

iOS点击手势状态开始没有命中

我用点击手势识别器制作了一个可点击的视图,工作得很好.但我希望在触摸发生时突出显示视图,并在触摸结束时将其移除.

我试过这个:

- (IBAction)refresh:(UITapGestureRecognizer *)sender {
    if(self.currentStatus == NODATA){
        if(sender.state == UIGestureRecognizerStateBegan){
            NSLog(@"Began!");
            [self.dashboardViewController.calendarContainer state:UIViewContainerStatusSELECTED];
        }
        if (sender.state == UIGestureRecognizerStateEnded){
             NSLog(@"%@", @"Ended");
            [self.dashboardViewController.calendarContainer state:UIViewContainerStatusNORMAL];
        } 
        [self setState:REFRESHING data:nil];
    }
}
Run Code Online (Sandbox Code Playgroud)

"Ended确实"的NSLog显示但是开始没有显示,所以它永远不会被选中.为什么是这样?

cocoa-touch ios

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

我应该如何重构我的自定义UITableView以提高可维护性

UITableView有很多不同的观点.在UITableView数据源的每个方法中,我需要检查单元格的类型和对象的类型,强制转换它们并正确操作.这不是很干净(它有效)但不是很容易维护.

所以我正在努力抽象这一部分,但我有点卡住了.以下代码是简化的,可能没那么有用,但它是为了演示我当前的问题:

extension UITableView {
    func dequeue<T: UITableViewCell>(_ type: T.Type,
                                     for indexPath: IndexPath) -> T {
        let cell = dequeueReusableCell(withIdentifier: String(describing: type),
                                       for: indexPath)
        guard let cellT = cell as? T else {
            fatalError("Dequeue failed, expect: \(type) was: \(cell)")
        }

        return cellT
    }
}

struct Row<Model, Cell> {
    let view: Cell.Type
    let model: Model

    var fill: ((Model, Cell) -> Void)
}

// Completly unrelated models
struct Person {
    let name: String
}

struct Animal {
    let …
Run Code Online (Sandbox Code Playgroud)

uitableview ios swift

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

Swift 类型检查需要很长时间

我已经在-Xfrontend -warn-long-expression-type-checking=50我的 Swift 项目中添加了这个标志,看看是什么花费了太长时间。我有以下表达式:

let s: String = "1234"
let t: Int? = Int(s)
Run Code Online (Sandbox Code Playgroud)

Int(s)我收到警告Expression took 52ms to type-check (limit: 50ms)。我只是想知道为什么这需要超过 50 毫秒才能弄清楚,因为我指定了所有类型。

xcode swift

6
推荐指数
1
解决办法
1875
查看次数

如何修复iOS 7状态栏的高度和宽度问题

我已经制作了一个自定义吐司库(非常简单,只是一个出现在导航栏下面的框).哪个在我的目标群体iOS 6中运行良好.但是自从iOS 7发布以来它没有正确显示.

我试图解决它的方式是通过这段代码:

if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7,0")){
    self.offset = [UIApplication sharedApplication].statusBarFrame.size.height + self.viewController.navigationController.navigationBar.frame.size.height;
}
Run Code Online (Sandbox Code Playgroud)

我创建了一个宏,可以在Stack overflow上找到,以检测iOS版本是否为7,然后添加状态栏高度和导航高度.这在iOS 7中以纵向模式正常工作,但当我切换到横向偏移变为512?时.

任何人都可以解释这种情况发生的方式以及如何解决这个问题?


决定拆分代码,因为评论,看看究竟是什么导致了差异.我做的是:

CGFloat statusBarHeight = [UIApplication sharedApplication] .statusBarFrame.size.height;

CGFloat navBar = self.viewController.navigationController.navigationBar.frame.size.height;
self.offset = statusBarHeight + navBar;
NSLog(@"Init - statusBarHeight: %f, navBar: %f", statusBarHeight, navBar);
Run Code Online (Sandbox Code Playgroud)

事实证明,状态栏在纵向20和景观中是480


这是因为高度和宽度转过来,回答来自评论

objective-c statusbar ios ios7

5
推荐指数
2
解决办法
8050
查看次数