我目前正在尝试跟踪文本字段的状态.
我正在使用自定义datePicker来设置文本 -setText
[self.textField setText:[self.dateFormatter stringFromDate:self.date]];
Run Code Online (Sandbox Code Playgroud)
在我的textFieldDelegate中,我编写了以下代码:
-(void)viewDidLoad {
[super viewDidLoad];
self.travelToOnTextField.delegate = self;
[self.travelToOnTextField addTarget:self action:@selector(travelToOnTextFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
}
-(void)travelToOnTextFieldDidChange:(id)sender
{
NSLog(@"Event Handler called");
}
Run Code Online (Sandbox Code Playgroud)
如果我通过自定义Datepicker更改文本,travelToOnDateTextFieldDidChange
则不会调用Method .但是,如果我使用我的电脑键盘更改文本,它会因某种原因而被调用.
这是故意的吗?
我知道SIRI-Services没有公共API,但是有简单语音识别的API吗?因此,如果我有一个文本字段并且用户点击该文本字段,则会出现一个带有典型麦克风按钮的键盘,如果按下它,语音会被识别并转换为字符串对象?或者这个按钮可能默认显示?
我目前正在玩Grand Central Dispatch并发现了一个名为的课程DispatchWorkItem
.文档似乎有点不完整,所以我不确定以正确的方式使用它.我创建了以下代码段,并期待一些不同的东西.我希望在调用cancel
它之后该项目将被取消.但由于某种原因,迭代仍在继续.我有什么想法我做错了吗?代码似乎对我来说很好.
@IBAction func testDispatchItems() {
let queue = DispatchQueue.global(attributes:.qosUserInitiated)
let item = DispatchWorkItem { [weak self] in
for i in 0...10000000 {
print(i)
self?.heavyWork()
}
}
queue.async(execute: item)
queue.after(walltime: .now() + 2) {
item.cancel()
}
}
Run Code Online (Sandbox Code Playgroud) 我目前正在尝试使用iOS Facebook SDK 3.1实现Facebook-Login-Flow.但它有一点问题.每次用户使用Facebook登录时,webview都会打开并说出来
"你已经授权了YOUR_APP .."
我根据以下示例编写的代码:单击此处 现在我的问题是,我如何避免这种行为以及我做错了什么?
我最近看了WWDC GCD的谈话,我认为有一个代码片段有问题.它是关于使用DispatchQueues使属性线程安全.
class MyObject {
private var internalState: Int
private let internalQueue: DispatchQueue // Serial or Concurrent?
var state: Int {
get {
return internalQueue.sync { internalState }
}
set (newState) {
internalQueue.sync { internalState = newState }
}
}
}
Run Code Online (Sandbox Code Playgroud)
他们使用DispatchQueue来锁定属性.但我认为这个片段无效,因为internalQueue可能是并发的.所以,如果我们所说的setter从两个不同的DispatchQueues /线程如果内部队列中不连续,这也可能导致右线程问题?因为在我的理解中,sync只保存调用线程,并在任务完成时继续.你觉得这个片段怎么样?我错了吗?
我目前正在进行项目,当我悬停元素时我必须弹出一些东西,并且在释放元素之后它应该隐藏一段时间后,但是如果我悬停弹出窗口本身定时器应该停止并且弹出窗口不应该隐藏.
所以我尝试了一个简单的计时器,它在释放触发弹出窗口的元素后被激活,当我悬停弹出窗口时计时器停止.但是这样做时会出现一些问题.我有很多元素悬停,当我在短时间内将它们全部悬停时,计时器被覆盖,没有任何工作应该如此.
所以我为我悬停的每个元素实现了一个特定的计时器.我将我的元素的id分配给我的popover中的数据属性,所以我知道哪个popover属于哪个元素.当我悬停元素时,将显示popover.当我释放元素时,计时器启动并且timer-id被分配到我的悬停元素中的data-attr.当我现在悬停我的popover时,我从我的popover中得到相应的elemnt-id,它获得了相应的计时器ID,然后我清除了这个特定的计时器.但它不起作用,当悬停和释放其中一个元素慢慢一切似乎工作,但如果在我可以悬停的元素之间更快一些问题发生.弹出有时只是在几秒钟后随机隐藏.我找不到我做错了什么?如果有人知道如何做得更好,那将是很棒的.码:
$(".timelineTour")
.popover({
offset: 10,
trigger: 'manual',
animate: false,
html: true,
placement: 'right',
template: '<div class="popover" onmouseover="$(this).mouseleave(function() {$(this).hide(); }); console.log(\'mouseover popover\');"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>'
}).mouseenter(function(){
$('.timelineTour').not($(this)).popover('hide');
$(this).popover('show');
}).mouseleave(function(){
var current = this;
var t = window.setTimeout(function(){
$(current).popover('hide');},1000);
$(current).attr("data-timer",t);
});
$(".popover").live("mouseenter",function () {
var k = $(this).find('.popoverContent').attr("data-tour-id");
var z = $('#'+k).attr("data-timer");
window.clearTimeout(z);
});
Run Code Online (Sandbox Code Playgroud) 我想在我的应用程序中添加一个tableview-look-a-like-login,但它似乎并不那么容易实现.我尝试使用多种方法来实现我的目标,但我不确定哪种解决方案是最好的.
例如,Dropbox和Facebook都有这样的登录页面.
以下是我的3种方法:
我在我的视图中添加了2个UITextfields(没有边框)并放置了一个.png后面,看起来像tableviewcell.(不是最好的方法,因为我想使用真实的tableviews)
我在ViewController中添加了一个Container View,里面放置了一个带有静态Table Views的tableview.这里的问题是,我不知道如何访问我的viewcontroller中的信息?
我在我的ViewController中添加了一个tableview,并使用了动态单元格.将委托和数据源的出口连接到我的viewcontroller,并使用委托和数据源方法初始化它们.这里的问题是,我不能在uiviewcontroller中使用静态表视图.
有没有更好的方法来解决这个问题?我真的想知道如何以更优雅的方式做到这一点.
编辑:
一个月前,ContainerViewController基本上解决了这个问题.将一个嵌入主控制器后,您可以通过该prepareForSegue
功能访问它,并为该特定控制器定义基于协议的接口,以与嵌入式控制器进行交互.
我在 SwiftUI 中遇到了一个奇怪的问题。我创建了一个简单的 View,它只包含一个 Button 和一个使用 PageViewStyle 的 TabView。TabView 似乎没有根据变量的状态正确更新其内容。似乎内容以某种方式更新,但视图不会像我期望的那样更新
这是我的视图代码:
struct ContentView: View {
@State var numberOfPages: Int = 0
@State var selectedIndex = 0
var body: some View {
VStack {
Text("Tap Me").onTapGesture(count: 1, perform: {
self.numberOfPages = [2,5,10,15].randomElement()!
self.selectedIndex = 0
})
TabView(selection: $selectedIndex){
ForEach(0..<numberOfPages, id: \.self) { index in
Text("\(index)").background(Color.red)
}
}
.frame(height: 300)
.tabViewStyle(PageTabViewStyle(indexDisplayMode: .automatic))
}.background(Color.blue)
}
}
Run Code Online (Sandbox Code Playgroud)
这是多次点击标签后的结果。初始状态不是 0 页。在您点击后,我希望 TabView 的内容发生变化,因此所有页面都将是可滚动和可见的,但由于某种原因,只有页面指示器会更新它的状态。
我正在尝试访问我的故事板的初始viewcontroller.它是一个导航控制器,通过一个seque连接到第二个视图控制器.所以在我的应用程序完成启动后,我想直接显示通过segue连接的viewController.我尝试使用这样的代码,但它不起作用......
UINavigationController *navController = (UINavigationController*)self.window.rootViewController;
[navController.topViewController performSegueWithIdentifier:@"showLoginScreen" sender:self];
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
4年后:
如果我在4年后再次查看我的问题,我真的不知道我的真正问题是什么.
我试图了解AFNetworking
框架是如何工作的.但是我不明白的细节很少.
我编写了一个子类,AFHTTPclient
使其成为一个单例类,并添加了一个执行以下操作的初始化程序:
- (id)initWithBaseURL:(NSURL *)url {
self = [super initWithBaseURL:url];
if (self) {
[self registerHTTPOperationClass:[AFJSONRequestOperation class]];
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
我从互联网上找到的教程中得到了这段代码,但是我不明白为什么我要注册我的课程,JSONRequestOperation
如果我想要获得JSON数据?如果我这样做,究竟在幕后发生了什么?这registerHTTPOperation
堂课究竟做了什么?
PS:有没有AFNetworking
关于互联网上某些地方的例子和深入解释的好文档?
ios ×6
objective-c ×3
cocoa-touch ×2
iphone ×2
swift ×2
afnetworking ×1
cancellation ×1
cocoa ×1
facebook ×1
http ×1
jquery ×1
popover ×1
siri ×1
swift3 ×1
swiftui ×1
tabview ×1
uidatepicker ×1
uistoryboard ×1
uitableview ×1
uitextfield ×1