小编Dun*_*n C的帖子

如何在NSAttributedString中创建可单击的链接?

在a中点击超链接是微不足道的UITextView.您只需在IB中的视图上设置"检测链接"复选框,它就会检测HTTP链接并将其转换为超链接.

但是,这仍然意味着用户看到的是"原始"链接.RTF文件和HTML都允许您设置一个用户可读的字符串,其中包含一个"后面"的链接.

可以很容易地将属性文本安装到文本视图中(或者,UILabel或者UITextField就此而言).但是,当该属性文本包含链接时,它不可单击.

有没有办法让用户可读的文本可以点击UITextView,UILabelUITextField

标记在SO上是不同的,但这是一般的想法.我想要的是这样的文字:

此变形是使用Face Dancer生成的,单击可在应用商店中查看.

我唯一能得到的是:

使用Face Dancer生成此变形,单击http://example.com/facedancer以在应用商店中查看.

objective-c hyperlink uitextview nsattributedstring ios

186
推荐指数
13
解决办法
19万
查看次数

Xcode 6自适应UI如何与iOS 7和iOS 6向后兼容?

我刚观看了WWDC视频#216,"用UIKit构建自适应UI".

大约在45:10,Tony Ricciardi谈到了Xcode 6中IB的变化,以支持新的变化.

他说:"你可以将这些文档向后部署到旧版本的iOS".

(其中"这些文档"可能意味着具有针对不同大小类别的特定设置的XIB和故事板.)

我不是这样做的.去观看WWDC视频.

怎么可能?特征集合和大小类仅在iOS 8中定义.如果依赖于iOS 8新增的UI构造的运行时行为如何在以前的iOS版本中运行?

如果可能那就太棒了.您可以构建将在iOS 6,7和8上运行的应用程序,并利用Apple添加到Xcode 6中的新的灵活UI布局功能.我已经在代码中创建了自适应UI逻辑,并且它有点相当工作的.

xcode6 adaptive-ui

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

如何在Swift中的视图控制器和其他对象之间共享数据?

假设我的Swift应用程序中有多个视图控制器,我希望能够在它们之间传递数据.如果我在视图控制器堆栈中有几个级别,我如何将数据传递给另一个视图控制器?或者在标签栏视图控制器中的标签之间?

(注意,这个问题是一个"铃声".)它被问到这么多,我决定写一个关于这个主题的教程.请参阅下面的答案.

ios swift

86
推荐指数
4
解决办法
6万
查看次数

如何在swift中将double转换为int

所以我想弄清楚如何在一个整数之后让我的程序失去.0时我不需要任何小数位.

@IBOutlet weak var numberOfPeopleTextField: UITextField!
@IBOutlet weak var amountOfTurkeyLabel: UILabel!
@IBOutlet weak var cookTimeLabel: UILabel!
@IBOutlet weak var thawTimeLabel: UILabel!


var turkeyPerPerson = 1.5
var hours: Int = 0
var minutes = 0.0

func multiply (#a: Double, b: Double) -> Double {
    return a * b
}

func divide (a: Double , b: Double) -> Double {
    return a / b
}

@IBAction func calculateButton(sender: AnyObject) {
    var numberOfPeople = numberOfPeopleTextField.text.toInt()
    var amountOfTurkey = multiply(a: 1.5, b: Double(numberOfPeople!))
    var …
Run Code Online (Sandbox Code Playgroud)

swift

43
推荐指数
5
解决办法
5万
查看次数

Xcode附加到进程不显示NSLog

我刚刚开始使用Apple Watch.我发现了" Five Minute Watchkit "中的说明,即让iOS应用程序和监视工具包应用程序都在模拟器中运行,并且两个进程都连接到LLDB调试器.

我所做的是启动并退出iOS应用程序以在SIM中安装当前版本.然后我切换到watchKit方案并启动它,它在手表模拟器上显示我的手表应用程序UI.

然后我在模拟器中启动相应的iOS应用程序,然后用户在Xcode菜单中"附加到进程",将调试器附加到正在运行的iOS应用程序.

这有效.我可以在监视工具包InterfaceController或我的iOS应用程序中设置断点,调试器会在应用程序中断.

但是,我没有在我的iOS应用程序的调试控制台中看到NSLog()语句.(我确实看到来自WatchKit扩展代码的日志语句.)如果我在我的iOS应用程序中设置断点,它确实会在该断点处停止.我假设缺少来自NSLog的控制台输出有关SOMETHING与附加到sim上的正在运行的进程而不是从Xcode启动它,但我不知道那是什么.

(顺便说一句,将动作附加到从断点调用NSLog的断点也不会显示,但是"日志消息"调试器命令会显示.有人有任何见解吗?)

编辑:iOS应用程序中的代码似乎并不重要.就我而言,这是一个简单的IBAction,它附加在iOS应用程序故事板中的按钮上:

- (IBAction)buttonAction:(UIButton *)sender;
{
  NSLog(@"Button clicked on iPhone");
}
Run Code Online (Sandbox Code Playgroud)

我可以在NSLog语句上设置断点.调试器在该行停止,但我没有在调试控制台中看到日志语句.

xcode objective-c ios apple-watch

25
推荐指数
3
解决办法
2万
查看次数

客观c中的Swift全局函数和全局函数

文件说:

在C和Objective-C源文件中定义的全局常量由Swift编译器自动导入为Swift全局常量.

但它并没有说明相反的事情.我需要定义一个全局swift常量,并且能够将它看作目标c方,就像全局c常量一样.就像在快速方面定义:

public let CARDS = ["card1", "card2"]
Run Code Online (Sandbox Code Playgroud)

并看到在目标c方面使用它

NSLog(@"Cards count: %d", [CARDS count])
Run Code Online (Sandbox Code Playgroud)

我该怎么办?我已经导入了swift自动生成的标题,如:

#import "MyProject-Swift.h"
Run Code Online (Sandbox Code Playgroud)

在Xcode中,如果我command-click在它上面,它会把我带到swift代码中的正确位置,但是在编译时我得到:

'User of undeclared Identifier CARDS'
Run Code Online (Sandbox Code Playgroud)

在我的目标c方面.

global-variables objective-c swift

22
推荐指数
2
解决办法
9231
查看次数

您是否注意到dispatch_after在iOS设备上运行速度太慢〜10%?

最近我一直在使用dispatch_after而不是performSelector:withObject:afterDelay,当我想在延迟后触发一些代码.代码更清晰,它可以访问封闭的范围,我可以将代码放入内联而不是写一个抛弃方法等等.

我的代码可能如下所示:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW,
  delay * NSEC_PER_SEC),
  dispatch_get_main_queue(),
  ^{
    //Delayed-execution code goes here.
  }
);
Run Code Online (Sandbox Code Playgroud)

但是,我最近发现这段代码的执行时间似乎比请求的速度慢了大约10%.如果我要求延迟10秒,我的块将在11秒后执行.这是在iOS设备上.时间似乎在模拟器上非常接近.

我用来测试它的代码非常简单:

NSTimeInterval startTime = [NSDate timeIntervalSinceReferenceDate];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW,
  delay * NSEC_PER_SEC),
  dispatch_get_main_queue(),
  ^{
    NSTimeInterval actualDelay = [NSDate timeIntervalSinceReferenceDate] - startTime;
    NSLog(@"Requested delay = %.3f. Atual delay = %.3f", delay, actualDelay);
    //Delayed-execution code goes here.
  }
);
Run Code Online (Sandbox Code Playgroud)

我已经在从iOS 4S到iPad Air的设备上进行了测试,而且额外的延迟非常一致.我还没有在像iPhone 4或iPad 2这样的旧设备上进行测试,尽管我很快就会这样做.

我可能期望在延迟中有20-50毫秒的"斜率",但是一致的10% - 11%的超调是奇怪的.

我在我的代码中添加了一个"软糖因子"来调整额外的延迟,但我发现它令人惊讶:

#define  delay_fudge 0.912557 //Value calculated based on averages from testing.


NSTimeInterval startTime = [NSDate timeIntervalSinceReferenceDate];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW,
  delay * delay_fudge *  NSEC_PER_SEC), …
Run Code Online (Sandbox Code Playgroud)

objective-c grand-central-dispatch ios objective-c-blocks

21
推荐指数
1
解决办法
3832
查看次数

Apple是否为OS X提供TestFlight beta测试?

TestFlight是iOS的一个受欢迎的变化.它使得分发beta版本对于开发人员和测试人员来说都是无痛的.

Apple也支持TestFlight for Mac OS吗?我已经做了很多搜索,并没有找到任何结论的方式或另一种.

我们有一个OS X应用程序商店应用程序,结果证明Yosemite存在安装问题.我们未能对Yosemite进行首次安装测试,所以我们错过了这个问题.

我开发了一个修复程序,很想让一些新用户试一试.当前用户删除整个"容器"目录并终止首选项过程以模拟全新安装,这很复杂,困难且具有破坏性.

我也不喜欢分发我们的应用程序的解锁版本的想法.如果出现这种情况,可能会损害应用商店应用的销售额.

我已经完成了诸如为测试应用程序添加了过期日期(弱保护)或创建的开发人员ID构建,这些构建仅在特定MAC地址列表的计算机上运行.最后一种方法有效,但维护起来既乏味又痛苦,并要求测试人员放弃有关其机器的唯一可识别信息.

我非常希望能够创建仅在Beta测试人员的计算机上运行的应用程序,就像TestFlight对iOS一样.

这是一个开发人员问题而不是代码问题.它不适合SO,但我想不出更好的Stack Exchange网站发布它.如果有人建议更好的网站发布问题,我很乐意将其移到那里.

macos mac-app-store

21
推荐指数
2
解决办法
7364
查看次数

您可以使用类别/扩展名向UIView添加IBDesignable属性吗?

对于那些不知道我在说什么的人,Xcode 6.0增加了新功能,IBDesignable和IBInspectable.

使用IBInspectable属性标记自定义视图时,这些属性将显示在IB中的"属性"检查器中.

同样,当您使用IBDesignable标记自定义UIView子类时,Xcode会编译您的视图并调用代码以在Xcode窗口中直接呈现视图对象,以便您可以看到它们的外观.

在自定义视图中添加IBDesignable和IBInspectable属性的技术在Swift和Objective-C中非常相似.IBInspectable属性显示在Interface Builder Attributes Inspector中,无论您使用哪种语言来定义它们.

我在Objective-C中创建了一个UIView类,并在Swift中创建了UIView的扩展,它将视图底层的borderWidth,cornerRadius,borderColor和layerBackgroundColor属性提升为视图的属性.如果更改属性,则扩展名/类别会根据需要键入转换,并将更改转发给图层.

IBInspectable部分运作良好.我看到并可以在IB属性检查器中设置新属性.

我可以在上周发誓,我的视图类别/扩展名上的IBDesignable属性也正常工作,我可以在IB中看到我的自定义UIView类别渲染,它具有更改的图层属性.本周它没有用.

我是产生幻觉的吗?

现有系统类的类别/扩展可以在使用IBDesignable设置时在Interface Builder中绘制自定义UI吗?

interface-builder ios xcode-storyboard ibdesignable ibinspectable

17
推荐指数
2
解决办法
9851
查看次数

有没有办法观察UIViewPropertyAnimator中fractionComplete的变化

我一直在关注UIViewPropertyAnimatoriOS 10中非常酷的新课程.它可以让您轻松地执行暂停,恢复和反向飞行UIView动画等操作.过去,您必须操纵系统创建的基础CAAnimations才能使用UIView动画执行此操作.

UIViewPropertyAnimator班级有一个属性fractionComplete.它从0.0(动画开始)到1.0(动画结束)不等.如果更改了值,则可以从头到尾"擦除"动画.

我在Github上有一个名为KeyframeViewAnimations的演示项目,它允许你使用滑块来使用相当神秘的CAAnimation技巧来回擦洗UIView和CAAnimations.当动画运行时,滑块从头到尾移动以显示动画的进度.该项目是在Swift发布之前用Objective-C编写的,但Objective-C或Swift中的底层技术是相同的.

我决定使用创建一个等效的项目UIViewPropertyAnimator.有一些怪癖,但它相当简单.我无法弄清楚如何干净利落的一件事是观察动画fractionComplete属性的进度,以便我可以随着动画的进展更新滑块.我尝试在fractionComplete属性上设置KVO(键值观察),但在动画完成之前它不会触发KVO通知.

我落得这样做是建立上一个很小的间隔运行,并查询定时器UIViewPropertyAnimatorfractionComplete反复性和更新滑块,因为它的进展.它有效,但它不是一种非常干净的做事方式.如果有办法获得有关动画进度的通知会好得多.

我希望有一些我想念的东西.

您可以UIViewPropertyAnimator在此链接上查看Github上的基础项目:UIViewPropertyAnimator-test.

从动画师获取进度值的代码是以下代码:

func startTimer(_ start: Bool) {
  if start {
    timer = Timer.scheduledTimer(withTimeInterval: 0.02,
     repeats: true) {
        timer in
        var value = Float(self.viewAnimator.fractionComplete)
        if self.animatingBackwards {
          value = 1 - value
        }
        self.animationSlider.value = value
     }
  }
  else {
    self.timer?.invalidate()
  }
}
Run Code Online (Sandbox Code Playgroud)

我应该将上面的代码转换为使用CADisplayLink计时器而不是vanilla Timer(NSTimer),但我希望有更好的方法.

animation uiview ios swift uiviewpropertyanimator

17
推荐指数
1
解决办法
973
查看次数