Does somebody know a rich text editor (like NSTextView for Mac OS X) library for the iOS platform?
我们正在开发iOS 8.0及更高版本的应用程序.此应用程序需要身份验证(或用户注册).在网站上,我们使用html表单注册和登录用户.这些形式是敏感的.用户还可以单击"使用Facebook登录"按钮以使用FB凭据登录.这个按钮是用FB的SDK for Javascript(v2.4)实现的
因此,我们不希望在我们的iOS应用程序上实现注册和日志的本机屏幕,但我们宁愿实现一个带有WKWebView元素的视图控制器来处理这种浏览体验.
但是,我们注意到,当用户点击"使用Facebook登录我"按钮时,没有任何反应.FB打开以询问用户登录和授予权限的典型弹出窗口永远不会出现.
以下是我们如何初始化WKWebView:
class LoginViewController: UIViewController, WKNavigationDelegate, WKUIDelegate {
var webView: WKWebView
@IBOutlet weak var cancelButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(webView)
webView.setTranslatesAutoresizingMaskIntoConstraints(false)
let height = NSLayoutConstraint(item: webView, attribute: .Height, relatedBy: .Equal, toItem: view, attribute: .Height, multiplier: 1, constant: 0)
let width = NSLayoutConstraint(item: webView, attribute: .Width, relatedBy: .Equal, toItem: view, attribute: .Width, multiplier: 1, constant: 0)
view.addConstraints([height, width])
loadDefaultUrl()
}
required init(coder aDecoder: NSCoder){
let config = WKWebViewConfiguration()
config.preferences.javaScriptCanOpenWindowsAutomatically = …Run Code Online (Sandbox Code Playgroud) 我有一个包含2个视图的核心数据应用程序.第一个视图列出"房间",第二个视图列出房间中的"场景"."房间"页面有一个编辑NavItem按钮,按下该按钮可启用添加NavItem按钮.您可以从此处删除和添加房间.添加的房间只是在表格中显示默认的"新房间"名称.第二个视图是所选房间中的场景列表.同样在这里,您可以删除和添加场景,添加的场景只会出现在名为"新场景"的表格中.没什么特别的.
我FetchedResultsController在两个视图控制器中都使用了一个,其中一个场景NSPredicate只能返回所选房间的场景.我还使用了controllerWillChangeContent,controllerDidChangeContent等,为表视图更新委托方法.
这一切都很好,但通常在房间和场景周围导航然后尝试删除一个场景它会崩溃.如果你玩的时间足够长,它将不可避免地崩溃.它只在删除场景时发生.如果您按下编辑按钮并删除一个场景并且它可以正常工作,则该编辑会话中的所有以下删除操作将始终有效.它只会在第一次删除编辑会话时崩溃.
我得到的错误很奇怪:
由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [__ NSCFType controllerWillChangeContent:]:无法识别的选择器发送到实例0x5e02d70'
此错误的第一部分有时会发生变化.有时它是__NSCFType,有时它是CALayer.仅在删除场景时才会出现此错误.添加场景很好100%.
我已经阅读了另一篇关于stackoverflow的文章,该文章表明这些错误可能来自内存管理问题.我已经仔细检查了代码,并通过仪器与泄漏仪器一起运行.没有泄漏.
还有什么我可以检查的吗?有任何想法吗?
这是相关的代码..
来自ScenesTableViewController.m:
// used to show/hide the add button
- (void)setEditing:(BOOL)editing animated:(BOOL)animate
{
[super setEditing:editing animated:animate];
if(editing)
{
self.navigationItem.leftBarButtonItem = addButton;
}
else
{
self.navigationItem.leftBarButtonItem = nil;
}
}
// called when the add button is pressed
- (void)addAction {
NSEntityDescription *myContentEntity = [NSEntityDescription entityForName:@"Scene" inManagedObjectContext:managedObjectContext];
Scene *contentToSave = [[Scene alloc] initWithEntity:myContentEntity insertIntoManagedObjectContext:managedObjectContext];
[contentToSave setValue:@"New Scene" …Run Code Online (Sandbox Code Playgroud) 注意:请在Swift中寻求答案.
我正在做的事情:
我目前是怎么做的:
我有一个包含标签的单元格的tableview.
生成单元格后,它们会调用一个函数来计算今天和存储的目标日期之间的时间,并显示标签中剩余的倒计时时间.
为了让单元格每秒更新标签,我使用一个NSTimer每秒重新加载tableview.
问题:倒计时有效,但是当我尝试执行"滑动到删除"操作时,因为NSTimer重新加载了tableview,它会重置刷过的单元格以便不再刷卡,当然这对最终用户来说是不可接受的.
我正在尝试/潜在的解决方案
我听说更好的方法是使用NSNotificationCenter触发器NSTimer并为每个单元添加侦听器.每隔1秒发送一次"广播" NSNotificationCenter,小区将收到"广播"并更新标签.
我尝试在代码中生成新单元格的每个单元格中添加一个侦听器:
// Generate the cells
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier("Tablecell", forIndexPath: indexPath) as UITableViewCell
let countdownEntry = fetchedResultController.objectAtIndexPath(indexPath) as CountdownEntry
// MARK: addObserver to "listen" for broadcasts
NSNotificationCenter.defaultCenter().addObserver(self, selector: "updateCountdownLabel", name: mySpecialNotificationKey, object: nil)
func updateCountdownLabel() {
println("broadcast received in cell")
if let actualLabelCountdown = labelCountdown {
// …Run Code Online (Sandbox Code Playgroud)我想将所有属性从一个复制NSMutableAttributedString到一个新属性.我试过的代码是这样的:
[attrStr enumerateAttribute:NSFontAttributeName inRange:NSMakeRange(0, attrStr.length) options:0 usingBlock:^(id value, NSRange range, BOOL *stop) {
if (value) {
// UIFont *oldFont = (UIFont *)value;
UIFont *newFont = [_label.attributedText
[attrStr removeAttribute:NSFontAttributeName range:range];
[attrStr addAttribute:NSFontAttributeName value:newFont range:range];
//found = YES;
}
}];
Run Code Online (Sandbox Code Playgroud)
代码显然是不完整的,看起来它试图只为字体做.我想遍历每个属性并将其添加到一个新NSMutableAttributedString变量中.更新:我的问题是如何将一个属性NSMutableAttributedString应用于另一个属性NSMutableAttributedString?我们可以使用这种方法吗?somehow:attribute:atIndex:effectiveRange
我不知道这是不是很愚蠢,但我现在已经在这个问题上抓了大约一两个小时.
我得到一个NSData对象,NSUserDefaults然后将其转换为UIImage.现在我如何将我的图像设置CCSprite为我的UIImage?
spriteWithFile在这里不起作用,因为它需要一个NSString.我正在寻找一个参数为a的API UIImage.这可能吗?
有任何想法吗?
编辑1:这是怎么回事?
UIImage *image = [UIImage imageWithData:(NSData*)obj];
sprite = [CCSprite spriteWithCGImage:image.CGImage key:@"mainSprite"];
Run Code Online (Sandbox Code Playgroud) 我实际上用界面构建器创建了UIScrollView一个UITableView内部.我设置了我的内容大小UIScrollView:
scrollView.contentSize = CGSizeMake(self.view.frame.size.width, self.view.frame.size.height);
Run Code Online (Sandbox Code Playgroud)
然后我将文件的所有者视图设置为 UIScrollView
我创建了一个IBOutlet UITableView并在界面构建器中设置它.
加载视图时.它显示我的正确内容大小UIScrollView.但它没有显示我的正确内容大小UITableView.此外,当我更改我的内容大小时UIScrollView,它会更改我的内容大小,UITableView就好像两个内容大小都相关.
任何人都知道如何保持我在界面构建器中设置的表视图的内容大小?
我们有:
(1)基于Facebook API的Web应用程序,具有Facebook OAuth功能("FB web app")
(2)UIWebView基于iPad的浏览器("浏览器")
我们的目标是打开Facebook登录页面以登录iPad上基于UIWebView的浏览器(2)内的FB Web应用程序(1).
这里有一个类似的问题:http:
//facebook.stackoverflow.com/questions/11337285/no-longer-able-to-login-to-ios-app-via-oauth-the-page-requested-was-未找到
但是,在用户在Facebook表单中输入登录名和密码后,就会出现问题.我们的问题是我们无法首先显示Facebook登录表单.正如该问题中所建议的那样,将应用类型从"Web"更改为"Native/Desktop"并没有帮助.
步骤:
1.使用此UIWebView浏览器打开我们的网页(简单的HTML页面)
2.单击此页面上的"FB web app"启动按钮
3. OnClick JavaScript尝试启动OAuth,这将打开Facebook的登录屏幕以登录到FB网络应用程序
当前结果(问题):
在iOS 5. +和iOS 6. +设备
- 我们的网页保持不变
- Facebook登录页面未显示(我们的网页仍然显示)
在iOS 4.3(按预期工作):
- Facebook登录页面UIWebView在浏览器的同一对象中打开(替换我们的网页)
预期结果:
- 显示Facebook登录页面,用户可以输入Facebook登录名和密码
- 在iOS 5. +和iOS 6. +上工作,如果在iPad上的Safari浏览器中启动.Facebook登录页面在单独的选项卡中打开(相比之下,没有单独的选项卡UIWebView)
问题:如何UIWebView在iOS 5+和iOS 6+上响应OAuth请求打开Facebook登录页面?
更多技术细节:
我们NSURLRequest从内部记录不同的字段
-(BOOL)webView(UIWebView*)webView shouldStartLoadWithRequest(NSURLREquest*)request navigationType:…
Run Code Online (Sandbox Code Playgroud)
我们注意到"正确"和"不正确"行为的日志存在一些差异.这里执行流程如何看待我:
首先,我按"FB Web App"启动按钮启动OAuth,然后有些情况下去了
iOS 4.3,"正确"
请求www.facebook.com/dialog/oauth?...
请求fbwebapp.com
请求m.facebook.com/login.php?.... -
其中facebook登录出现
iOS 5.0,"incorrect1"
请求www.facebook.com/dialog/oauth?...
请求fbwebapp.com …
我有一个本地视频播放使用AVPlayer和AVPlayerLayer(斯威夫特的iOS 8.2),我需要调整AVPlayerLayer(introPlayerLayer当它的父视图() introView)被调整,包括对取向变化.到目前为止,我所尝试过的任何东西似乎都没有用,而且playerLayer它的大小和位置都不对.
该AVPlayer设置使用本地MP4视频,并且AVPlayerLayer正在使用该播放器初始化.然后将该图层作为子图层添加到父视图中.
这是我的代码:
func playIntro() {
let path = NSBundle.mainBundle().pathForResource("intro", ofType: "mp4")
let url = NSURL.fileURLWithPath(path!)
let introPlayer = AVPlayer(URL: url)
introPlayer.allowsExternalPlayback = false
var introPlayerLayer = AVPlayerLayer(player: introPlayer)
introView.layer.addSublayer(introPlayerLayer)
introPlayerLayer.frame = introView.bounds
NSNotificationCenter.defaultCenter().addObserver(self, selector: "playerDidFinishPlaying:", name: AVPlayerItemDidPlayToEndTimeNotification, object: introPlayer.currentItem)
introView.hidden = false
introPlayer.play()
}
Run Code Online (Sandbox Code Playgroud)
我应该添加AVPlayerLayer作为子层UIView,或者我应该继承父容器(UIView),如https://developer.apple.com/library/ios/documentation/AudioVideo/的"播放器视图"部分所示Conceptual/AVFoundationPG/Articles/02_Playback.html.如果是这样,我将如何PlayerView在Swift中编写该子类(在Objective-C中显示)?提前感谢您的任何帮助.
自从我搬到新的iOS9和Xcode 7后,我偶然发现了UICollectionView我的应用程序中的一个问题.
显然,UICollectionView似乎没有UICollectionViewCell正确地更新布局和约束,只有在它被重用之前.
图片说得比文字更好 - 这UIViewController是第一次看到时的样子:

然而,这不是正确的布局,当我UICollectionView向左水平滑动时,我得到了新出现的单元格的正确布局:

当我向后滑动时,旧的细胞不正确,现在重复使用并且看起来很好.
现在,就像升级到iOS9和Xcode 7之前一样,我想要的效果是即使首次出现,单元格也具有正确的布局.
为方便起见,以下是有关如何UICollectionView设置及其在XIB中的约束的更多详细信息:

在代码中,它非常标准:
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell : MatchmakersCollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier("CollectionCell", forIndexPath: indexPath) as! MatchmakersCollectionViewCell
cell.imageView.backgroundColor = UIColor.lightGrayColor()
cell.bottomName.text = "StackOverflow"
return cell
}
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return self.matchmakers.count
}
func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
return 1
}
Run Code Online (Sandbox Code Playgroud)
每次我更新数据源(self.matchmakers)时,我都会打电话 self.collectionView.reloadData()
我注意到的最后一件事非常奇怪,当使用Xcode调试调试视图层次结构时,UICollectionViewCell从未正确显示子视图,只是给了我一个默认值UIView:

ios ×8
iphone ×4
swift ×3
uitableview ×2
api ×1
avplayer ×1
cocoa-touch ×1
contentsize ×1
core-data ×1
facebook ×1
image ×1
ios5 ×1
ios6 ×1
ios9 ×1
ipad ×1
nstimer ×1
oauth ×1
scrollview ×1
xcode7 ×1